What I ended up doing is using a bitbanged I2C driver. I modified Erich Steyger's GenericI2C PE component, fixed the timing, added support for FreeRTOS so it wouldn't choke the CPU while doing transfers, and wrote a very robust (if I do say so myself!) reset routine, based on a bunch of different approaches out there (each of which had good insights but missed something another one had...)
I could do that because I didn't need any type of fast transfer speed. It's been working well, and Erich pushed all my changes back into his driver, so if you d/l the current version you'll get all that stuff.
in a nutshell, I had multiple problems: the SigmaDSP had a faulty power supply setup which made it flaky, and the I2C_LDD driver design pattern is basically inappropriate for transferring huge swaths of data like a chunk of program code, due to the amount of RAM you have to allocate to do it. If you're using the I2C peripheral, better to use the Init_I2C PE component, and then import the I2C_PDD macros and use those, and customize the DMA to your own purpose, or possibly end up not using it.