Hallo proevofreak,

ich habe nicht das ganze Programm angesehen.

Wichtig ist auf jeden Fall, die Variable interruptcounter anders zu deklarieren:
volatile uint8_t interruptcounter; //abgeändert

Die task_SERVO muss wahrscheinlich auch öfter aufgerufen werden, weil deine Unterprogramme doch viel Zeit brauchen, bis die Hauptschleife wieder dran kommt.

Gruß Dirk