Also das komplette Analysieren Deines Programms ist mir jetzt zu mühsam.
Aber:
Ich setze den Befehl SLEEP (meist/immer) in der Mainloop ein. Das 
sichert ab, das alle ISRs ordentlich verlassen wurden und alle Jobs (per 
Jobflags) erledigt sind. Ich nutze SLEEP im Idle-Mode (meist) bereits 
für ganz einfache Programme, wenn alle Jobs der Mainloop erledigt sind, 
schicke ich den AVR schlafen. Der nächste Interrupt weckt ihn dann 
wieder und vor dem nächsten Interrupt kann sowiso kein neuer Job (über 
Jobflags) in Auftrag gegeben werden.
In Deinem Fall müsste beim Start des ADC der Sleep-Mode von Idle auf 
ADC-Noise-red. umgeschaltet werden. Laut Datenblatt (Seite 41) sollte 
der ADC bereits eingeschaltet, aber nicht gestartet sein, dann startet 
er beim Aufruf von Sleep (wenn Mode ADC-Noise-red. voreingestellt ist) 
automatisch. Ist der ADC-Interrupt korrekt initialisiert, dann wird der 
AVR auch ordentlich geweckt. In der ADC-ISR muss der Sleepmode natürlich 
sofort wieder auf Idle umgeschaltet werden, damit beim nächsten Sleep 
ein Timer das Wecken schafft.
Übrigens: Während ACD-Sleep bleiben die Timer stehen (deren Takt wird ja 
deaktiviert). Es kann durchaus möglich sein, dass eine Korrektur der 
Timer erforderlich ist.
Ein Beispiel mit umschaltbarem Sleep-Mode findest Du hier:
http://www.hanneslux.de/avr/divers/index.html
Es ist allerdings nicht mit Tiny26 und auch nicht mit ADC-Noise-red., 
sondern mit Tiny15 und "Tiefschlaf" (Wecken per ext-Int).
...