EEPROM Misreading (solved)

1 byte for month(9), 1 byte for day(9), 1 byte for year(12), 1 word for count (up to 9999)

No, you're not:

  int monthDay = bcdToDec(Wire.read());
  int month = bcdToDec(Wire.read());
  int year = bcdToDec(Wire.read());

ints are two bytes each.

      eeprom_write_byte((uint8_t*)savedAddress, month);                //eg address 100
      eeprom_write_byte((uint8_t*)savedAddress+1, monthDay);           //101
      eeprom_write_byte((uint8_t*)savedAddress+2, year);               //102
      eeprom_write_word((uint16_t*)savedAddress+3, counter);           //103 and 104 since its a word (2 bytes)

You are casting the address to a byte, not the value.

Why you are casting the address to a byte sometimes and to an int other times is a mystery.