変数に単精度を使っていても、内部の計算はたいてい、倍精度で行われます。
この辺は処理系やコンパイラによって違いがあるとは思いますが、ifcやg77では
倍精度なんではないでしょうか。結局、これまでに分かっていることから、
1.倍精度で行った計算の結果をそのまま使うか、単精度のメモリ内容を
  再度ロードするかの違い
2.倍精度で行った計算の結果を単精度に型変換するときのやりかたの違い
のいずれか、または両方が原因であると考えられます。

解決としては、全体または部分的にでも倍精度変数にするというのがいいのでは?
私は、いろいろ注意するのが面倒だったりするので、常に倍精度でプログラムしてます。