After going back and forth in email with the Linux xc5000 driver author this morning, I did some more testing tonight after getting home from work and I isolated the problem.
I don't think anybody cares about the gory details, but in short it ended up being an incompatibility between xc5000.c and dib0700_core.c in terms of how i2c read messages are passed. The result is i2c read messages get sent onto the USB bus as i2c write messages and then the caller is surprised when the call returns as successful but the output buffer is unchanged.
Wow, that was a pain in the ass.
I also found a fairly minor bug in the xc5000 driver where it reports some write calls as successful even when they fail.
I won't be able to do a patch before I go on vacation, but I will email the author of the dib0700 driver and I should be able to get the digital support working after I get back.