I, too, found some real weirdness with early
8720s. They were the only chip big enough to
handle my task, so I couldn't switch to another
device or slow it down. I found myself doing all
sorts of work-arounds to get it to work.

The "late model" (July 2005 and later) 8720s and the
8722's are fine.


Something you might try -
Read PORTD with one instruction

Something like:

PORTDMirror = PortD

channel.bit0 = PORTDMirror.0
channel.bit1 = PORTDMirror.1
channel.bit2 = PORTDMirror.2
channel.bit3 = PORTDMirror.3
...