Pointer to array gets highest bit toggled by ... compiler? (dsPIC33EP & XC16)
Ok, I'll answer myself, but credits to @BRHANS, who gave the correct hint!

Default setting of XC16 memory model: &quot;CONST IN CODE&quot; = variables declared as CONST will be placed in flash rom. In this case it is this variable:

  const uint8_t image_data_timer_53x56[53]


The PSV-feature of the dsPIC allows using those const-rom-variables like any other variable in RAM. For more info on PSV see section &quot;Memory Organization&quot; in the DS.
BUT...common &quot;RAM&quot;-variables will be found in the lower half of data memory space while the upper half is reserved for PSV-variables (mapped).
So, when using a POINTER to such a variable it makes a big difference. The compiler needs to know, that the variable is PSV-managed to handle it correctly.
This is done by the &quot;psv&quot; type qualifier:

  const uint8_t *rawDataPtr

 needs to be:

  __psv__ const uint8_t *rawDataPtr


Here we go.. it works!

2 more comments:

If you know it (and now you and I do) you can see it in the debugger watch already: There is a &quot;P&quot; on the symbol and a &quot;(PSV)&quot; in the type-label.
The distinction between upper and lower half of the memory space is made by bit 15 of the EA-word, which is exactly why I saw that paricular bit as &quot;toggled&quot; (see headline). EA&lt;15&gt; = 1 means PSV. So the shown address was not necessarily wrong, but the compiler didn't handle it correctly.