Ich dachte nur, weil grad' der interessante Teil gefehlt hat

Also, an der Variablen "Zeittick" liegt es jedenfalls nicht
Sie ist auf der addresse 0x0064, und genau da greifen sowohl die ISR's als auch dein Main-Vergleich hin.
Code:
// Eine nichtunterbrechbare Interrupt-Service-Routine
SIGNAL (TIM1_COMPA_vect)
{
	 Zeittick = Zeittick + 1;
  62:	80 91 64 00 	lds	r24, 0x0064			
  66:	8f 5f       	subi	r24, 0xFF	; 255
  68:	80 93 64 00 	sts	0x0064, r24

}
SIGNAL (TIM1_OVF_vect)
{
	Zeittick = Zeittick + 1;
  86:	80 91 64 00 	lds	r24, 0x0064
  8a:	8f 5f       	subi	r24, 0xFF	; 255
  8c:	80 93 64 00 	sts	0x0064, r24

}

int main (void) 
{
      while(1) 
     {
	 if (Zeittick >= 3)
  f8:	80 91 64 00 lds	r24, 0x0064
  fc:	83 30       	  cpi	r24, 0x03	; 3
  fe:	e0 f3       	  brcs	.-8      	; 0xf8 
                {
	     PORTB |= (1 << PB3);    // setzt Bit 3 an PortB auf 1
 100:	c3 9a       	sbi	0x18, 3	; 24
 102:	fa cf       	rjmp	.-12     	; 0xf8 <__stack+0x19>
                }
     }
}
Das kann man also vergessen. Beide ISR's zählen am Zeitticker ?

Jetzt muß man das Timer u. Interrupt Setup auf Richtigkeit checken, denn wenn die laufen, MUSS die main-routine irgendwann >=3 erkennen.