Das ist schon richtig so, wie der Firefox es macht. Wie du siehst, ist die Unterstreichung ja auch überall rot, selbst unter dem blauen Text. Es wird halt vom <p> erstmal alles unterstrichen gemacht, was drin ist. Ob da noch irgendwelche <span>s oder andere (Inline-)Elemente drin sind, ist völlig irrelevant. Du kannst das text-decoration:none vom span auch weglassen und erhälst das gleiche Ergebnis. Vererbt wird es eh nicht.
Willst du keine Unterstreichung haben, musst du sowas basteln:
<p style="color:red;">
<span style="text-decoration:underline;">Rot ist unterstrichener Text, aber</span>
<span style="color:blue;"> Blau nicht </span>
<span style="text-decoration:underline;">und das hier ist wieder Rot.</span>
</p>