Your program works fine here on an 18F4525.
I don't have a 2525, but they are pretty much the same except for the number of pins.

I can put the data anywhere in program memory and it still works.

What do your CONFIG's look like?
If you have any "Table Reads" protected it could explain it.

You should have these as your configs ...
Code:
        __CONFIG    _CONFIG1H, _OSC_HS_1H
        __CONFIG    _CONFIG2H, _WDT_ON_2H & _WDTPS_512_2H
        __CONFIG    _CONFIG3H, _PBADEN_OFF_3H
        __CONFIG    _CONFIG4L, _LVP_OFF_4L & _XINST_OFF_4L