libsecp256k1で動かない理由がオーバーフローにある点を突き止めました。どうやら位数だとオーバーフローする仕様で、その位数から1を引いた数は格納できる内容でした。まさか、楕円曲線の定数がオーバフローするとは考えておらず、overflowフラグをNULLにしていたため、発見が遅れてしまいました。
つまり、位数から1を引いた数を、negの1(つまり-1)とみなして、この数からeを引き、引いておいた1を加えば問題ないことがわかりました。これで invert(e) * priv が実現できます。
実際、これで検証した結果、OpenSSLとぴったりな値となって、あらゆる鍵でSignとVerifyをパスできました。やや回避策のような感じですが、これで確実に動くことは間違いないため、問題なしといたしました。