Was die Browser daraus machen steht auf einem anderen Blatt. Spezifiziert ist es jedenfalls so.
HTML 4 ist 12 Jahre alt und diese Parser-Regeln wurden nie in der Praxis umgesetzt. Näher an der Realität (weil dieser hinterherspezifiziert) ist da HTML5, welches den Parser genauer spezifiziert. Dort ist auch festgelegt, dass der Parser script-Inhalt bis </script> parst, nicht bis zu einem beliebigen </.
http://www.w3.org/TR/html5/tokenization.html#script-data-end-tag-name-state
<script> alert('<b>foo</b>'); </script> ist daher valides HTML5.
Wenn man mal nachdenkt, welcher Grund sollte auch bestehen, das script-Element bei </ zuzumachen. Klar, das ist nicht SGML- oder XML-konform, denn ein SGML-Parser nimmt </ natürlich immer als End-Tag-Anfang. Aber HTML 4 hat hier ohnehin eine Ausnahme von SGML festgelegt: »Although the STYLE and SCRIPT elements use CDATA for their data model, for these elements, CDATA must be handled differently by user agents.« Das ist natürlich nicht SGML-konform, d.h. ein normaler SGML-Parser, der nur die DTD kennt, ignoriert m.W. diese (nirgends maschinenlesbar notierte) Sonderregel und ersetzt bspw. Entity-Referenzen. Das habe ich nie verstanden, das war m.W. schon immer inkonsistent. HTML5 räumt da jetzt auf, wobei für XHTML5 natürlich die XML-Regeln gelten.
Mathias