My working details, per-request
So, the setup is the same as you what you have in its essentials:
The code is your code with the near-1 kHz tweak. That said, I believe I also tested it at the default rate and that worked as well. In any case, the images that show the LED changing were taken while that 1 kHz adjustment was made.
The UNO and Nano are ...
This is sort of answer material, but it's meant to be supplementary to the other answers that more directly address your question and quite well, I think, though I'm unable to test right now. So if you find this helpful, vote it up, but mark one of the others accepted if this tweak makes it work.
Specifically to address this content ...
This won't work with 24Cxx EEPROMS.
The I2C bus works this way:
Master writes out an address.
Slave takes over the SDA line and pulls it high or low to indicate an ACK or NAK.
Master writes out a command for reading from an address.
Again Slave takes over SDA and ACKs the command.
Master is continuing to pulse SCL while Slave puts out data to SDA.
This is just a hacky idea how you could solve this.
Decrease the I2C frequency below 10kHz or - as you only want to read the eeprom once at start - even down to 1kHz. This way the WS2812 will see a series of low pulses with a duration >50us which it should take as a reset signal. Practically, the WS2812 will ignore such a signal.
But there's a different ...
The AT24C16 is an I2C bus device but the WS2812 is not. If you can tolerate spurious outputs on the WS2812 LEDs, you can read the AT24C16 using I2C by addressing the device properly. The WS2812 will "listen" and may display things as that traffic is flowing past it.
When you are finished with the AT24C16 you will probably need to disable the I2C ...