It sounds like the hardware clock has an incorrect time. During boot the system clock will be initialized from the hardware clock, which could explain the incorrect start time for all processes created during boot.
That you see the correct date later is probably because the system clock is adjusted using NTP. Why the corrected time does not also get written to the hardware clock is puzzling.
A failed battery could explain why the hardware clock loses time after a power cycle. But a reboot without power cycling the machine should not cause the hardware clock to lose its time.
What you can do to find more clues is first of all to look in /var/log/syslog*
for messages about time being adjusted. Look for messages containing the string ntp
.
Moreover the hwclock
command line tool can be used to manipulate the hardware clock. First I'd verify if it has a correct value:
sudo hwclock --show
If the hardware clock is indeed running behind you can copy the system time to the hardware clock using:
sudo hwclock --systohc
And then verify that it now has the correct value with --show
.