You could also be using software date/time, rather than processor/hardware date/time. In that case, the software date/time are kept by incrementing each time a timer tick of a known frequency occurs. If you are disabling interrupts, including the timer tick,
you can miss some ticks and over time get incorrect date/time. This used to be a problem with Windows Mobile devices where any significant interrupt-disable operation resulted in the time being wrong. If you are really just reading the RTC registers managed
by hardware in the processor and not sensitive to interrupt availability, as Bruce says, your hardware is broken.
If you have an external, battery-backed RTC, why wouldn't you modify your BSP to use it for all date/time operations? You'd always have the "right" date and time and not have to worry about copying on startup and possible loss of time.
Paul T.