Why when I pull an EEPROM index the value returned is garbage?
Your array is in PROGMEM, but you are accessing it as if it were in RAM.

You must use pgm_read_word() to access the data in your array.

pgm_read_word(&amp;(colorTheme[EEPROM.read(x)]))


BTW - what Arduino board has more than 2kB of EEPROM?