Check how your tests return NACK after writing 0xA9, 0xAB, 0xAD...
That's no good, it should ACK, like the other memory.
Anyways, you started reading the 16K eeprom at 0xA9, try with A0/A1.
You might need to send a stop condition between the blocks, as that's what deselects the device.
Sending a restart, then selecting a different block might jam something up, not sure, but the stop won't cause any harm.
[0xA0 0[0xA1 r:256][0xA2 0[0xA3 r:256]
Remember to check the datasheet, not all eeproms are the same, some use larger addressing.
Ex. the 24LC64, also has 8 blocks, but they're 1K each, so it uses 2 bytes for addressing.
Reading 1K from address 0 would be:
[0xA0 0 0[0xA1 r:256 r:256 r:256 r:256]
This could be dangerous on a small addressing eeprom, as you would be writing a first byte after the address 0.
The datasheet states the writing is triggered after the stop condition, so as long as you don't send a stop condition, it seems safe.
This would write the first byte:
[0xA0 0 0]
This shouldn't, because there's a restart condition:
[0xA0 0 0[0xA1 r:256]
So perhabs it's a 64K eeprom? Have you physically examined it?