Confusing Behavior with 2D Array in Flash

OK, well arrays (as you called it) was a collection of pointers, where the pointers themselves were in PROGMEM.

So you have to do a "read word" to get the pointer from progmem, and then use that pointer to get the actual data.