guix:
Shouldn't you be using pgm_read_dword_far instead?
The linker migrates progmem constants to the lower part of address space. If the aggregate of progmem constants is larger than 64K, then it would be necessary to use _far to address the ones past that mark. With the O/Ps "uint32_t MAPGreen[][97]" a bit more than 160 elements will fit. It might make sense to have a line or two of code to assert that sizeof(MAPGreen) < 64K, just in case.