Das cli und sei kann/sollte man sich in der ISR sparen. Darum kümmert
sich der Compiler. (Das SEI sollte an der Stelle nicht kommen, weil
sonst u.U. sogar der gleiche Interrupt noch mal zu schlägt, wenn das
Interrupt-FLag noch nicht zurückgesetzt worden ist!)
Hast schon was vom CTC-Mode gehört/gelesen? Damit kann man sehr fein
feste PWM-Frequenzen basteln, die nichts mit dem Overflow zu tun haben.
Und dann solltest du nur so große Variablen verwenden, wie du wirklich
brauchst. Ein AVR kann 16bittige Variablen nicht atomar bearbeiten, was
dazu führen kann, dass während der Bearbeitung ein Interrupt auftritt,
der auf diese Variable zugreift. Schon kommt Mist dabei heraus.
Das sind jetzt alles recht allgemein gehaltene Hinweise, da ich dein
Programm nicht verstehe.