Make sure your NTP client also sets the hardware clock (through the BIOS), and not just the Linux software clock.
You can check your hardware clock using the
hwclock program (located in
/sbin) and compare it to the software clock using the
Your computer has a small chip in it, which is called "the real-time clock" or RTC. This clock runs on a battery, and counts time just like a wrist-watch. When the computer goes on, the clock is read, and that's how your operating system knows what time it is when it starts up. But after that first read, the operating systems doesn't have to use the RTC - it can simply continue counting time (seconds, hours and whatever) by itself. Whenever the user asks what time its, it can simply report its own time (instead of the time that the RTC reports).
The tricky bit comes when the RTC doesn't have the right time. When you try to correct the clock, it's really the operating system that does that for you. The operating system may only update its internal, software, clock. In that case, once you reboot the incorrect time will be loaded again from the RTC. I still remember this from the DOS days. You had to go into the BIOS to change the clock. ugh.
Anyway, the final nail in the coffin is this: the time read from the RTC is just a number. And the operating system is allowed to change that number. For example, it might want to add 3,600,000 milliseconds (1 hour) to that number, so that GMT+1 users feel comfortable. Other times, there's something screwy with the timezone settings.
Either way, setting the hardware clock from within the operating system tends to fix this, since it goes through the same filtering process. So even if your OS adds 5 minutes to the RTC, it will also subtract 5 minutes before updating the RTC.