その通りで \1 が \\1 でした
でもそれで実行しても文字通り 「\1」 のまま置換されちゃうんでバグだと思ったんですよね

と考えているうちにわかった!
モード指定に SEARCH_RE だけじゃなくて SEARCH_ESC も要るのか

replace(text, \"(\w+)", \"「\1」", SEARCH_RE|SEARCH_ESC);

以前は SEARCH_NOESC だったから指定しなくて良かったのにいつの間に…
しかも SEARCH_RE の説明に SEARCH_NOESC 無効って書いてるのに