The first bug and the one that has been causing all the games to flicker, was that I wasn't copying enough bytes for the sprite DMA. Part of the problem here is the documentation:
Name - DMA
Contents - DMA Transfer and Start Address (W)
The DMA Transfer (40*28 bit) from internal ROM or RAM
($0000-$F19F) to the OAM (address $FE00-$FE9F) can be
performed. It takes 160 microseconds for the transfer.
40*28 bit = #140 or #$8C. As you can see, it only
transfers $8C bytes of data. OAM data is $A0 bytes
long, from $0-$9F.
But if you examine the OAM data you see that 4 bits are
not in use.
40*32 bit = #$A0, but since 4 bits for each OAM is not
used it's 40*28 bit.
It transfers all the OAM data to OAM RAM.
The DMA transfer start address can be designated every
$100 from address $0000-$F100. That means $0000, $0100,
Got all that? Well basically each sprite is 4 bytes, but you only need the first 28 bits. When I first read this I though it just copied the first 0x8C bytes. Maybe the hardware does only transfer 28 bits per sprite for speed, but I can get away with just transferring 0xA0 bytes. Why they couldn't just say 0xA0, I have no idea.
Next bug was some fixing the interrupt timing. See the GameBoy has an instruction called HALT which justs halts the processor until an interrupt occurs. I've been ignoring it since most games just check the LCD registers after and if nothing happened jump back to the HALT. However there are some games that don't and seem to be built around it. Damn programming was a lot harder back then, I swear these guys where counting clock cycles.
Finally a bug that caused some of the games to flicker their title screens. Problem was that I was only checking if the LCD was enabled when I did the actual rendering of the whole screen during VBlank. Some games though would turn the screen on right when the VBlank occurred so now I check it every scan line.
I don't know why I wrote all that, so here's what you're really here for:
Kirby's Dreamland 2 and Gargoyle's Quest, I haven't tested them throughly, but at least they start.