if(~PINB & 1 << PB0)
Ich schreibe Pin-Abfragen immer so:
if(!(PINB&(1<<PB0)))

Das Variable die in einer ISR verwendet und verändert werden können, als volatile deklariert werden müssen ist schon klar.