guarda, a occhio non mi sembra che l' una escluda l' altra
sicuro di non sovrapporre nella logica queste evidenzia e disevidenzia?

puoi anche provare a fare tutti i controlli come conseguenze
ribaltando la valorizzazione di convalida, che diventa true solo se tutto va a buon fine
codice:
var convalida=false;
if(document.getElementById("parolachiave").value==""){
  evidenzia("parolachiave");
} else {
  disevidenzia("parolachiave");
  if(document.getElementById("parolachiave2").value==""){
    evidenzia("parolachiave2");
  } else {
    disevidenzia("parolachiave2");
    if(document.getElementById("parolachiave").value!=document.getElementById("parolachiave2").value){
      evidenzia("parolachiave");
      evidenzia("parolachiave2");
    } else {
      disevidenzia("parolachiave");
      disevidenzia("parolachiave2");
      convalida=true;
    } 
  }
}
if(convalida) ...blabla...