Arduino based EEPROM programmer acts weird
It looks like the code you linked to does not follow the standard programming algorithm of an EEPROM but just blindly programs a byte without ever polling for the end of the write cycle. The code waits 1 ms after programming every byte, but the write cycle time of an EEPROM can be larger than that see the AT28C256 datasheet, page 9.
Normally you check for the end of the EEPROM write cycle by reading back data from the EEPROM and checking if bit 7 of the data read back is equal to bit 7 of the data being written. This is explained in the data sheet, the I/O7 !DATA polling algorithm, page 1.



Your code just assumes the write cycle is finished within 1 ms (the delay(1) between the writeEnable() and chipDisable() calls and proceeds to programming the next byte. As some EEPROMs have a maximum write cycle time larger than 1 ms, this can fail.



The solution is to either implement a polling algorithm, which is preferred because it's faster and more reliable but it's also more complicated. The alternative is to wait for the maximum amount of time allowed for a write cycle (~10ms but this is dependent on your device).