◆ PromiseRejectionEvent がないので Firefox は Promise 自体が polyfill に上書きされてた
◆ async function の返り値を instanceof すると false になってた
◆ Firefox 69 では PromiseRejectionEvent に対応したので何もしなくても動くようになった

core-js で上書きされる

Firefox で挙動がおかしいと思って調べてみたら

const p = async function(){}()
p instanceof Promise
// false

になってました
原因は Promise が core-js のものに置き換わってたことです
async function 自体は Firefox で動くのでこっちは Native な Promise が返ってきます
それに対して Promise が core-js のものなので false になります

Chrome だと Promise はビルトインが使われていて true でした

core-js は自分でビルドしたもので IE11 と Chrome は対象にしていましたが Firefox は含めてなかったので もしかすると関係あるのかなと思って core-js-bundle-3.2.1 を使ってみましたが変わらずでした
中を見てみても 機能の有無で polyfill を使うかどうかを判断してるので ビルド時に指定したかはやっぱり関係なさそうです

原因

気になったので使うか判定してる部分のコードを読んでみたところ

(IS_NODE || typeof PromiseRejectionEvent == 'function')

が false になっていました
これが true でないと polyfill で上書きされます
Node.js ではないので PromiseRejectionEvent が必要ということになります

確認してみたら Chrome ではありましたが Firefox 68 ではありませんでした
フラグが必要のようです
Firefox 69 ではフラグ不要みたいだったのでアップデートすると無事 true になるようになりました

運が良かった

Promise みたいなビルトインであるものでも上書きされてることがあるのは予想外でした
ちょうど 69 が今日リリースされてたので助かりました
リリースされてなかったら async function を Babel で構文変換するか core-js のビルド時に Promise は対象外にするなど変更する必要がでてきて面倒なことになるところでした