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.