Thanks for your reply.
I dug a bit further, and it actually found the Fog1.png in the DAT file. What was actually happening was libpng failing to read it, the actual error reported was "
IDAT: invalid distance too far back"
I'm compiling against libpng 1.6 (not 1.5 as the binary release uses), and it appears loading of some PNG files was broken in 1.6. From the libpng manual (not allowed to post the link...):
Libpng-1.6.0 and later use the CMF bytes at the beginning of the IDAT stream
to set the size of the sliding window for reading instead of using the default
32-kbyte sliding window size. It was discovered that there are hundreds of PNG
files in the wild that have incorrect CMF bytes that cause libpng to now issue
a "too far back" error and reject the file. Libpng-1.6.3 provides a way to
revert to the libpng-1.5.x behavior (ignoring the CMF bytes and using a
32-kbyte sliding window), by using
png_set_option(png_ptr, PNG_MAXIMUM_INFLATE_WINDOW,
PNG_OPTION_ON);
and provides a tool (contrib/tools/pngfix) for optimizing the CMF bytes
correctly.
Adding the above line of code to CPNGHandler sorted the issue and it now runs successfully.
(Of course I could have used libpng 1.5, but I'd rather use the one provided by my system if possible!)