下線を任意の文字列、行の概念も捨てて表現すると…

 __\n__\n<pre>\n__\n</pre>\n__\n__
.↑   ↑                    ↑   ↑
希望するインデントの挿入位置はここ

 __\n__\n<pre>\n__\n</pre>\n__\n__
.↑   ↑   ↑    ↑    ↑    ↑   ↑
mオプション付与時の ^ のマッチ位置はここ

3番目の矢印の位置に^がマッチする前に<pre>〜</pre>を食い切ればいい。
あらら、「\n?」いらないっぽい。

ということで推敲してこうなった。
$text =~ s/(?:(<pre>.*?<\/pre>)|^)/$1||"\t"/sgme;