We had been having some problems with EEPROM not programming correctly when programming the k series PICs with the Pickit or IDC3, mainly PIC18F25k80 and PIC18F26k80.
Hopefully this little tip will be useful to somebody
I found that firstly it was best to use the latest IPE (Integrated Programming Environment) from Microchip. This ensure that if a recent silicon revision has required a little tweak to the programming timing then hopefully Microchip have implemented that in the firmware that IPE downloads to your Pickit. This program is packaged with MPLABX. When you install you have the option to install everything or just IPE, for those who are not developing but just need to program the PICs.
The problem seemed to be caused when, after programming, the PIC immediately tried to run, without necessarily having the right clock or power up sequence. This could cause EEPROM corruption. If programming in a standalone ZIF adapter, then there is no clock source at all, if programming in circuit, then there is a clock, but it seems that it cannot be guaranteed to initialise correctly when coming out of programming.
The solution turned out to be very simple. I found that IPE has an option in settings, where you can select "hold in reset" after programming. This option is not selected by default. By turning this option on, and then powering off after programming without allowing the PIC to run, I now have 100% reliability in programming the EEPROM in these chips.