Not sure what to do with the remote capture related code. create_dng_for_ptp() was based on write_dng(), and free_dng_for_ptp() may need to be adjusted too.
Yes, this will be fun again.

But create_dng_for_ptp is a copy, so it doesn't have to change to match the new write_dng. We could make it do swapping in parallel with sending, but I think for PTP the better solution is still to make a version that sends dng data unswapped and lets the client deal with it. There will be a few changes like I had to do in the write_dng_orig, but I think that shouldn't be too difficult.
3) What to do with the chunk sizes? Optimal values will vary depending not just on the camera, but also the card.
There could be presets available from the UI ("slow card" / "fast card" or so, the other factors could be the sensor's pixel count, bit depth, DIGIC generation). Just an idea.
Yes, this would be a possibility if someone wants to do the work. There is definitely more room for improvement, but I'd like to get a working version in the trunk sooner rather than later.