みなさんありがとう。

マニュアルにも記載された長大文字列については検証済みで、
一部の変数をunset()するなどして文字数を減らしたりしたのですが、
unsetする変数の組み合わせによっては文字長に関係なく成功したり、文字数が長いほうが成功したり、
かといって特定の変数の文字列の中身が悪さをしているかと言えばそうでもなさそうで、
ほとほと困っていたところでした。

しかし、>>381のURLに載ってるpcre設定を5000000にしたところ、
どんな文字列の場合でも成功するようです。

試行錯誤でなかなか実態を掴めなかったのは、preg関数に渡す文字列長そのものと言うより、
正規表現マッチ処理中に使われるメモリ使用量(?)的な制限だからなのかなと思いました。

なお、( *)(.*)は、あとで$1,$2を使って再利用する目的です。省略せずに書くとこんな感じ。
preg_replace('/^( *)(.*)(Object|Array)$/m', "$1<li><code class=\"parent\">{$marker}$2$3</code>", $content);