The power of two thing is for optimization. In computer-lish, it uses the graphics card memory most efficiently, since everything is based off of twos. It used
to be the case that 3d cards would drop a texture not of a power of two dimmension like it was made of scorpions, and continue on as if nothing happened (creating an invisible object). Some cards still
do that (like my laptop, THAT was fun to figure out), but most things, like blender, take preventative measures by converting it into the next largest power of two. If we were using just regular old box-projection mapping, instead of a UV unwrap, it would result in texture distortion. But we are not, so it just adds some white stuff around the unused edges when it renders, and preserves the UV coordinates.
The texture preview is going to be de-rezed in order to allow for smooth UI handling, there isn't much you can do about that. In theory, you could double the texture's dimmensions in you favorite image browser, to try and compensate some. But it is just the preview texture, don't lose sight at what is in hand...
*update = adding the 16 pixels to make 64 x 64 cleaned the texture up very nicely in the preview, but it still isn't crisp. Good enough to know the end results, though.
...This is the ideal end condition, when rendered. I had to do nothing to the texture (still 48x64), it worked as is. I had to turn off interpolation, like last time, but I also had to turn off pre-multiply. Pre-multiply works like interpolation for alpha, and in this case it would add white edges to the box. The checkbox is in the Texture tab, under where you specify the location of the texture (the "Image" section.
Also, shoutout to SolarLune for alerting me to the UV snap-to-pixels feature, it was very useful for this. http://dl.dropbox.com/u/20581642/pixelCube.blend