In future, when posting code please use
SMF BBCode code tags, or attach it as a text file.
There are two non-obvious things wrong with that code, There is no delay after startup or wait for a user button press before starting to write to EEPROM, and there is nothing to stop the processor at the end of the program. (END is a MPASM directive, it doesn't generate code.) It has 2048 instruction words so if running at 1 MIPS from a 4MHz crystal, it will blow through the unprogrammed instruction locations in about 2 ms, then execution will wrap back to the start. As writing to EEPROM typically takes 4ms, worst case 8ms there's a less than 33% chance you'll cut power after the write has finished, before it repeats it, and even lower odds at higher crystal frequencies. If you interrupt a write that's in progress the usual result is failure to program, either unprogramed 0xFF or corrupted data.
Additionally, the programmer typially briefly powers the chip and releases /MCLR during the process of identifying it. If you don't have a short delay after powerup (1/4 sec will do), or wait for user intervention on a non-ICSP pin, its fairly certain that it will run your code as far as the EEPROM write when you try to read the EEPROM contents, and interrupt the write by raising /MCLR to Vpp before it can complete, leaving the EEPROM location unprogrammed or corrupted.