Saving as PNG with TImage.Picture.SaveToFile raises the same exception.
However, your second solution works, it results in a 32 bpp bitmap (according to the IrfanView image properties).
Using pf24bit, pf8bit, pf4bit results in the same file (all 24 bpp). Strange. When I use pf1bit instead, it raises the known exception.
So your solution is kind of a workaround, but it doesn't solve the problem itself.
Maybe that needs to be investigated further.