Is it not the case that...
In redundant systems, only one system is actually running and controlling the process. The other system is not controlling the process, however, it is in hot-stand-by.
The running process is responsible for developing and maintaining the current data values.
Since the stand-by unit is expected to pick-up running when the primary unit fails, then the back-up unit needs to be kept abreast of the latest data values.
In order for the back-up to be kept abreast of the latest data, the primary unit must inform the back-up unit of that data. This means that the back-up data will not be the same as the primary data until the primary goes through the effort of updating the back-up.
As long as the primary unit is running it is updating the back-up data values as well as its' own. Thus, if the primary fails, the back-up can pick-up with the latest values.
It appears that the primary only updates "changed data". This means that the back-up version of any particular data WILL NOT be the same... until the back-up locations are, in fact, updated. So, whenever a location is being updated the data will not match until the update is complete.
It appears that the primary updates this one particular location (possibly more) only occasionally... once every week or two. This probably depends on the particular conditions at the time. You might want to look for data values (locations) that rarely get written.
It appears that the memory maps in the two systems DO NOT match.
As long as the primary doesn't need to write to a particular location, things run fine. However, when the primary updates a particular location within its' own system, and then attempts to update the corresponding location in the back-up... the primary finds that the particular location has not been initialized, declared, defined, in the back-up unit.
I should think that, when compiling a redundant system, the compiler would explicitly compare the initialized, declared, defined, locations to ensure that the memory maps match by base-address, data-type and size.
You might check, and compare, all of your tables, shift-registers, and the like, for base-addresses, data-types and size. I think you'll find your problem in there somewhere.
If you don't... then you'll have to go through each and every write-to-data-location instruction.
The oldest, and most common, programming problem that occurs in data handling is that damned "off-by-one" problem.
As in... Does Index=1 mean the "base address" or does it mean the "base address + 1"?