This is a bug in the .Net framework; it seems to have a problem with the way transparency works on paletted png images.
See, paletted png images are actually fully alpha-capable, on a palette level. The png file has a specific extra chunk (the "tRNS" chunk) that can be added to define the alpha of each palette entry. Somehow, when encountering this, the .Net framework applies this alpha correctly, but then insists on treating the image as 32bppARGB.
This is very strange, because it completely supports alpha on the palette in exactly that way, and can in fact save files like that without any issue.
What is especially odd is that the file you have there doesn't actually have transparency on its palette; the "tRNS" chunk defines all palette entries as 100% opaque. But it seems just having the chunk is enough.
The workaround is to load the png into a byte array, read and cut out the "tRNS" chunk containing the transparency data so the .Net framework retains the indexed format, and, after loading the image from a stream created from the edited byte array, post-process the palette using the read "tRNS" data to apply the alpha.
The full code to do that is posted in this answer:
A: Loading an indexed color image file correctly
By the way, analysis of the png chunks showed that that second image is in fact a one-bit-per-pixel image, with a palette of 256 colours. No idea how you managed that.