MD5とSHA1のどちらの場合でも、取得しようとしたファイル全体をマッピングしようとしていることを確認しました。そのため、Windowsのプロセス内でのアドレス空間の制限にひっかかってしまい、失敗しているようです(32bitsアプリでは、OS2G、アプリ2Gの計4Gのアドレス空間のなかでやりくりする)
(エラーにならず、空に対する値が返ってしまう。この辺は、他の命令でもエラーにならずに適当な値を返す命令は多く、この命令も同様のようです。)
1.5G前後のファイルサイズで空と等しい値が返るのはこれが原因のようです。
SHA-1の、256MB以上での原因はまだ不明です。
1.5G前後のファイル対策は行うとして、何らかのエラーの際には、エラーを発生させるか、空文字列を返す(空文字列のハッシュ値ではなく)ように変更するかの、いずれかがよさそうですね。