You are free to find it odd - did it help?
Here is a clip from sf2d_create_texture - C3D_TexInit(&texture->tex, next_pow2(width), next_pow2(height), pixel_format);
Notice the next_pow2 calls? The sfil png load call works by decoding the png into calculated row offsets using the pow2 values). Based on this it will leave the right edge and bottom of the image as garbage. However, if you are not tiling the image you should be able to scale your texture coordinates. For example if the width was 400 then the right edge would be 400/512 rather than 1.0.
--------------------- MERGED ---------------------------
I stand corrected - looking at the sd2d code that does appear to be the case. No idea then - good luck.
--------------------- MERGED ---------------------------
I can say that the tiling of the textures is an optimization for the 3D hardware which is also tile based. I believe the idea is cache locality - keep all the needed texels close together to limits reads.