Finally, I’ve got it!
Sniffing the HTTP resonses indicated that a few extra bytes were being inserted between the headers and body of the http response, resulting in bad image data.
Further investigation revealed that these characters represent a Unicode Byte Order Mark (BOM).
These, in turn, were caused by a Windows editor that saved wp-config.php with a UTF-8 encoding that includes the BOM. Re-saving the wp-config file using a editor (Notepad++) that can strip the BOM resolved the problem. The only additional requirement was to flush the browser cache to clear the bad response.
I hope this helps someone else who has a similar problem. It has taken me literally hours to fins the answer, but I’ve learned a lot on the way.