Pues en teoria si que es correcto... Prueba con lo siguiente:
Código PHP:
<?php
$opcion = $_POST['opcion'];
if($opcion == "dos"){
echo "opcion 2";
if (!isset($_POST['submit'])) {
echo "<form method=post action=".$_SERVER['PHP_SELF'].">
<table>
<tr><td><input type='submit' value='submit' name='submit'></td></tr>
</table>
</form>";
}else{
echo "todo ok";
}
}elseif($opcion == "tres"){
}else{
}
?>
La verdad es que no veo el error... Lo único que prueba añadiendole las comillas al código HTML.
Saludos,
Editado.
También he cambiado la parte del action del form.