Probabilmente perchè nell'input hidden devi mettere l'attributo name e non nome

Codice PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Documento senza titolo</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body><form method="post" action="validare.php">
<?php
if($_POST['nome'] == ""){
    echo
'Il campo Nome deve essere rempito

        Nome: <input type="text" name="nome" size="20">
'
;
}
else{
    echo
'<input type="hidden" name="nome" value="'.$_POST['nome'].'">nome memorizzato
'
;
}
if(
$_POST['cognome'] == ""){
    echo
'Il campo Cognome deve essere rempito

        Cognome: <input type="text" name="cognome" size="20">
'
;
}
else{
    echo
'<input type="hidden" name="cognome" value="'.$_POST['cognome'].'">cognome memorizzato
'
;
}
if(
$_POST['nome'] != "" && $_POST['cognome'] != ""){
    echo
'registrazione fatta
'
;
}
else{
    echo
'<input type="submit" name="invia" value="Invia">';
}
?>
</form>
</body>
</html>