Ok, a few more things:
I tried to read the contents of CONFIG3L and CONFIG3H, which have the information regarding microcontroller mode and the ECCP2 multiplexing.
Code:
char *CONFIG3L = 0x300004, *CONFIG3H = 0x300005;
printf("Init CONFIG3L=%d CONFIG3H=%d",(int)(*CONFIG3L),(int)(*CONFIG3H));
prints out two sets of 0. Any reason this wouldn't work? It seems that most of the registers have handy named variables, but none of the CONFIG registers do. The documentation says that they are mapped into the memory space, so I don't see why a pointer dereference wouldn't grab the value... any other way to read these registers?