I’ve sort of noticed that too. I’ve always chalked it up to JPEG-ery. JPEG is not lossless and my theory is that when I upload an already lossy JPEG to a host, that host re-compresses it (for resizing or just because it can) and during the recompression, the image shifts.
I haven’t researched the topic, however. A simple test would be to upload, download the uploaded and compare with the original.
Most web browsers are not color space aware, so usually this problem happens if you’re saving the image in a color space other than SRGB. To fix this in Photoshop CS3: Edit > Convert to profile > Select SRGB.