As of this question/answer, I found that my textures loaded with the wrong sizes because the PNG was saved using a different resolution. Saving them again with another app helps.
My 128x48 PNG was reported to be loaded as 96x36. Resizing the texture by the proper factor draws the pixels correctly. Another file worked properly out of the box. The correct file has a PPI of 72 while the "broken" one has a PPI of 96. Re-saving the broken file with 72 PPI helps.
Why's this resolution a problem? Can we load PNGs independent of the resolution? Or can we determine the resolution after loading and change the image accordingly so I don't have to re-save every image file after editing it just in case?