Was ist mit i und j in SIG_OVERFLOW0? Die sind nicht initialisiert! Eigentlich sollte der Compiler das warnen...

So wie du die verwendest sollten die static sein:
Code:
SIGNAL(...)
{
   static uint8_t i=0, j=0;
   i++;
   ...
Das nimmt die aber die möglichkeit, sie von "aussen" zu verändern, etwa resetten wenn die IR-Daten korrupt sind. Was du willst ist IMHO nicht lokal static, sondern static.