Another observation: I loaded the problematic image into an image list where it is displayed correctly. I used the image list editor to save it back to a different file. After loading this image into the Glyph of a speed button the error disappears.
Both images differ in the color depth of the pixels: while the original image has 16 bits per pixel the re-saved image has 32 bits per pixel. Looking at the lfm file it can be seen that the image data section for the original image is about half the size of the re-saved image.
From this, I'd conclude that TSpeedButton and TBitBtn probably write the 16bit image to the lfm file, while the ImageList makes a conversion to 32bit. Since the 16bit image in the lfm file is not displayed correctly the conclusion could be that the png writer has an issue with the 16bit pixel format. But: When I load the problematic image into an TPortableNetworkGraphic and save it immediately back to file the result is a 16bit per pixel image again which is identical with the original image. And this image can be read without issues.
So, in total, I suspect that streaming to the lfm file cannot handle the 16bit-per-pixel png image correctly.