This is the problem with specifying only GL_RGB (or whatever) as internal format when uploading the texture. The OpenGL-specs says that (among a few other constants) GL_RGB is a constant that only tells OpenGL to use red, green and blue components, but it does NOT tell you HOW MANY bits for each component, this is up to the driver to choose (probably some default set by the one who wrote the driver).
Using GL_RGB when uploading the texture can mean quite a few different combinations. One implementation can interpret this as GL_R5G5B6 (meaning 5 bits per component, taking two bytes per pixel), or maybe even GL_R16G16B16 (yes, TWO bytes per component, with a total of SIX bytes per pixel). So your driver probably chooses some pixelformat with less acuracy.
To solve these kind of problem, you should use the constats specifying a predefined set of bits, like the ones i mentioned above.
The other constans that is used like this is constans like GL_RGB, GL_RGBA, GL_ALPHA, GL_LUMINANCE, GL_LUMINANCE_ALPHA, and maybe a few more.