Ähhh.. das IST die "beste" Routine soweit...
Der Timer0 produziert alle paar mS einen Interrupt und schaut, ob sich was am Pin getan hat. Das wird dann alles ausgewertet, bis der RC5 komplett ist und fertig.

Ein Umstricken des Codes auf einen externen Interrupt anstelle des regelmäßigen Interrupts fände ich in der Tat auch gut, weil ich Timer0 für was anderes nutzen will.. Dazu muss ich mir den Code aber nochmal sehr genau ansehen