EEPROM Misreading (solved)

eeprom_read_word((uint16_t*)10);

This looks funky. One does not generally want to cast a constant as a pointer! There is no good reason for eeprom_read_word() to need a pointer. Perhaps you should check the eeprom functions to se if they write through those pointers. If they do then that could all sorts of oddness.