The first one was pretty embarrassing, basically I was using windows calculator to find a the right shift amount for 0x2000 and used 1 << 0xD, but I forgot my hex for a second and put 1 << 14 in my program so all the reads/writes to the upper 8KB of VRAM failed.
The palette issues where simply because I was doing the 15bpp to 32bpp conversion at the wrong time. My code uses A8R8G8B8 for everything, but the GameBoy Color uses X1B5G5R5. I could use the same format, but someday I'd like to implement a tile editor/viewer and have it work for all systems so it's easier just to stick with 32bpp.
Finally the problem with the old GameBoy games, was that I forgot about the changes in RAM size between systems. The GameBoy Color has 8 4KB banks of internal RAM, but the older version only has 8KB. With the older games I was only accessing the first 4KB.
Anyway, enough talk. Here's what you came here for:
I can't get the damn Oracle series to work. Seems it still thinks it's running on an old system.
I've also broken Kirby's Dream Land 2 again and the star in Super Mario Land doesn't work. I've dealt with that bug numerous times though and it has to do with the timer interrupt. Damn interrupts and their finicky timing!
Edit: Nevermind, fixed that as well.
I use a similar conversion to 32-bit ARGB technique for the SMS/GG palette (one is 6-bit, the other 12-bit), it does seem the easiest way.