Just looking at my code to see where the bytes have gone, and I noticed this EEPROM READ BYTE code from WinAVR 2010.01.10
out 0x1f, r1 ; 31 out 0x1e, r24 ; 30 sbi 0x1c, 0 ; 28 eor r25, r25 in r24, 0x1d ; 29
The first "out" instruction sets the High Byte of the address to zero. Or it would, if the High Byte of the address was defined on an ATTINY2313. Actually, register ox1f is reserved. The "eor" sets the high byte of the data byte to zero. Or it would, if the data byte had a high byte.
The good thing is that each processor is separately declared in EEPROM.h, so unique code can be used for each processor. The bad thing (apart from using the wrong code) is that eeprom_read_byte is no longer static inline, which adds another 4 bytes.