As code (using an array rather than EEPROM for clarity):
#define N ... whatever ....
int prev_value; // whatever was written last
int eeprom[N] ; // simulated EEPROM, N is size in units (here int)
int addr ; // write pointer, advances round-robin fashion
void setup()
{
prev_value = read_value() ;
addr = random (0..N-1) ; // tricky part is seeding this random number
}
int read_value ()
{
int value = 0 ;
for (int i = 0 ; i < N ; i++)
value ^= eeprom[i] ;
return value;
}
void write_new_value(int new_value)
{
eeprom[addr] = eeprom[addr] ^ prev_value ^ new_value ; // single write only.
prev_value = new_value ;
addr += 1 ;
if (addr >= N)
addr = 0 ;
}
Some details I glossed over, like addressing for multibyte entries in the EEPROM, randomizing well at startup.
You could lose the global prev_value and rescan the whole eeprom each time to calculate it when writing if you wanted.