Schau dir erstmal die defines für die Statuscodes in der avr-libc (<util/twi.h>)
an.
if (TWSR &0b11111000 == 0x80)
versteht keiner.
if (TW_STATUS == TW_SR_DATA_ACK)
ist da schon deutlich besser lesbar.

Lass dir mal in der ISR den aktuellen Statuscode ausgeben. Dazu solltest du beim Master ne gewisse Wartezeit zwischen zwei Übertragungen einfügen.