Ridiculous idea #1: maybe the problem is specific to _creating_ files (like Linux is getting some of the header metadata wrong). So I start from a disk image containing a file of at least the same size as my image, and overwrite just the data, leaving the file name and attributes as unchanged as I can.
This works better: DPaint loads the file without an error! But the results are … not what I had hoped for. Some recognisable blocks of data from the original image, but it looks as if about every 4Kb of the file something weird happens. I guess Linux and AmigaDOS have a further disagreement over some aspect of the disk filesystem format. (7/8)