Bevor ich die Story der ganzen Bits nachlese:
Du solltest auf jeden Fall beim Slave das Empfangen INNERHALB der Schleife haben. So macht er ja nur einen einzigen Versuch, dann musst du wieder resetten.
Also etwa so :
Code:
   while(1)
  {
       buffer = i2c_getbyte();      //Empfangen des Bytes
       PORTD = buffer;      //Ausgabe zur Kontrolle
   }
   return(0);
Beim Empfangen vernisse ich auch das Lesen von den Daten selbst (TWDR)