Also die Ungenauigkeit des Taktes sollte für dich nicht wahrnehmbar sein - das bewegt sich im Bereich der ppm.
Ich vermute eher, dass der nicht richtig schlafen geht oder sowas.
Und verlege mal die ganze Rechnerei vom INT in die Main-Loop!
Im INT nur noch ein Flag setzen und das dann in der Main abfragen.
Wenns gesetzt ist einmal rechnen, shiften, schlafen.