[Galaxy 3 Q&A, Help & Troubleshooting] DerpyDerp:
That is some interesting behavior. While I was working with the source code of the kernel, I was 99% sure that this is a hardware bug.

So, I try to explain it more noob-safe for you: You have this phone. This phone has a processor. That's the one that runs at 667Mhz (not overclocked) and is your main processor. But that is not the only one inside your phone. But it's the only one that runs Android with the underlying kernel. Your phone has some more processors, like the camera, the USB connector, your baseband chip and of course the clock. These "processors" (or simply "chips") cannot be modified. So they can only do the job they are designed to do. (You cannot get your camera processing chip to calculate prime numbers. This chip can only pre-process camera signals)

Your main processor can interact with these chips. This is obvious, your phone depends on this. Because everything in your phone is connected to the main processor somehow, you can access all chips and tell them to do something. In your source code, you write something like: "Hey processor, write these bytes to this chip, please, and tell me what it replies" or "Hey processor, please read this information from that chip". That happens when you write or read from the internal hardware clock. ("Write that time" or "Read that time"). But because this is some low level stuff, we read each time component individually. So second, minute, hour, day of month, month and year.

This hardware clock has also the task of notifying the main processor at a certain time. That's what developers call "interrupt". Imagine you lock your phone and it goes to sleep. The processor calls the clock: "Hey mate, wake me up tomorrow at 08:00 AM" - clock: "Alright!". The processor then goes to sleep, because processors like to sleep. At 08:00 AM, Clock: "Hey processor, it's the clock. Wake up". Processor: "Yo, nice. I'm gonna check what tasks are due and do some work...".

But here lays the problem: Whenever the kernel updates the time on the hardware clock (Only happens when you change the time in the Android settings) the hardware clock does not save the year "2016" properly. So when the kernel reads the time it ends up with the year "2010". The Android system itself keeps track of its clock, so it will never be a problem showing you the correct time. But it gets a problem when your phone is sleeping and it should notify you at some point. The point is: It won't notify you.

And here is why I'm sure it is a hardware bug:

There is nothing magic about this clock driver. The source code for this driver was initially developed by Samsung, but is now online and part of the linux source code. It simply reads and writes the time components to their corresponding place. And because it is only the year that gets messed up, there must be something wrong with the way the chip handles the year.

What you can try:

Set up an alarm to ring in 5 minutes. Put phone in flight mode, disconnect USB, disconnect WiFi. Lock phone and put it somewhere you won't touch it. Wait. If it won't ring, leave it there for 2 more minutes.

I looked at the Froyo source and the driver is the same. I patched the source for the Froyo kernel. The *.tar file is attached. Use at your own risk. I have not tested this one! If phone won't boot, flash back the original ROM/Kernel! Flash the tar file only if you're sure the original ROM contains a kernel. If you're not sure, don't flash!

I also attached the patch if someone is interested.

No worries. :D