Double check that your flash writing code is 100% correct.
Are you disabling interrupts during erasing and writing?
Are you sure that FCLK is set correctly?
Make a test where you never write to flash and see what happens.
I say that, because corrupted flash and bad erase/write routines can show up as all sorts
of random problems. If you never write to flash in your code, and it still happens you might be able to rule that out.
Also carefully read the spec as to how temperature affects flash.
Are you using extended temperature parts?
You are right at the limits for normal temperature parts. If you truly need that range, you are not allowing for ANY margins at all. Not good practice.
What about other components in the design of the board?