pre要素の中はpとかbrが付かないので、script要素も同じルールを適用すればいいかも、と思いformatting.phpのfunction wpautop()の所を見る。80~81行目に

if (strpos(&#36;pee, '&lt;pre') !== false)        &#36;pee = preg_replace('!(&lt;pre.*?&gt;)(.*?)&lt;/pre&gt;!ise', &quot; stripslashes('&#36;1') .  stripslashes(clean_pre('&#36;2'))  . '&lt;/pre&gt;' &quot;, &#36;pee);`</pre>という部分があったので、ここのpreをscriptに書き換えたものを追記したらうまくいった。
このままだとWPのバージョンアップの時に上書きされてしまうので、昨日作ったプラグインの中に入れてみた。動作の流れがよく分からないけど、とりあえずうまく動く。
<pre>`&lt;?php/*Plugin Name: ScriptShieldPlugin URI: http:/hogehoge.com/Description: stop wpautop in ScriptTags.Version: 0.1Author: oreAuthor URI: http:/hogehoge.com/*/&#36;scriptshield = new ScriptShield();add_filter('the_content', array(&amp;&#36;scriptshield, 'delete_paragraph'));add_filter('the_excerpt', array(&amp;&#36;scriptshield, 'delete_paragraph'));unset(&#36;scriptshield);class ScriptShield &#123;        function delete_paragraph(&#36;content) &#123;                &#36;content = preg_replace('|&lt;p&gt;&lt;script([^&gt;]*)&gt;|i', &quot;&lt;script&#36;1&gt;&quot;, &#36;content);                &#36;content = str_replace('&lt;/script&gt;&lt;/p&gt;', '&lt;/script&gt;', &#36;content);                if (strpos(&#36;content, '&lt;script') !== false)                        &#36;content = preg_replace('!(&lt;script.*?&gt;)(.*?)&lt;/script&gt;!ise', &quot; stripslashes('&#36;1') .  stripslashes(clean_pre('&#36;2'))  . '&lt;/script&gt;' &quot;, &#36;content);                                return &#36;content;        &#125;        &#125;?&gt;

BBcodeもどきを使うと、プラグインを使わなくなったときにゴミになるし嫌だな…と思っていたので、とりあえずこれを使ってみることにします。
本当はデフォルトで対応してくれてると助かるんだけど、scriptの中にpを入れる理由が何かあるんだろうか。その辺がわからないから、その内地雷踏みそうで怖い。それみたことかーッ!と誰かに言われそうだ。