With C is quite easy to happen, don't know about fortran though.
Touched upon compiler (internals and flags) in a separate post.
We are talking totality of systems here, the compiler that produces the programs is part of the system that uses the program.
"So assuming the two programs running are in fact the exact same,"
The source code for the programs might as well be the same, but the actual (binary) program is not necessarily the same.
Or to put it in other words, both systems might be perfectly correct, but there is a class of software bugs that get revealed only when incarnated after being compiled in one of the several perfectly legit ways. The dimension of this set of possible alternative optimisations can be quite high if your language offers many areas for undefined behaviour.
Does anybody know if fortran is plagued by it as much as C ?
Either the old computer (and systems that came before it) were producing the wrong results, and the new one is more accurate.
Or the old system (and systems that came before it) produced the right results, and the new system has a bug.
These things do happen, but it's very expensive to fix hardware.