Having power of two textures help when you want to make sprite batch - some numbers cannot be presented in float/double format with 100% precision - this may lead to artifacts, using power of two textures there will never be any artifacts related to texture coordinates.
I've suspected that this may be the culprit of a few unsolved texture bleeding problems out there, but I'm not sure if it's actually real. Let's say we have a texture containing three 20x20 sprites, making the texture 60x20 pixels large. If we want to draw the first sprite, the x texture coordinate would essentially go from 0 to 1.0/3.0. The second value would be rounded to 0.3333333432674408, which would potentially mean that the middle sprite could be sampled. How this rounding error would manifest itself would depend on how exactly the GPU interpolates texture coordinates for pixels, which probably varies between GPUs, vendors, drivers, etc.
This isn't a problem when both the sprite and the texture is a power of two thanks 1. to all edge values being exactly representable with floats and 2. the top-left fill convention OpenGL and DirectX uses.