Da segunda forma a página é redirecionada, porém o link na barra do navegador continua com o mesmo link e os métodos da página cadastrar_usuario não são invocados.
Então resumindo o problema, ao redirecionar a página os métodos JSF não funcionam.
Obs: o immediate=“true” é para que não seja realizada a validação dos campos na sua página, dessa forma o fluxo do JSF é alterado para que não seja executada a fase de validação. Como é apenas uma navegação, acredito que os campos que você possui na tela não precisam ser validados no caso do redirecionamento, correto?
Em relação ao método que não está sendo chamado, já tentou verificar se não ocorreu algum erro na fase de conversão/validação do JSF? Você pode utilizar um PhaseListener para verificar. Caso ache interessante, segue um exemplo de PhaseListener:
packagebr.com.guj.filters;importjavax.faces.application.NavigationHandler;importjavax.faces.context.FacesContext;importjavax.faces.event.PhaseEvent;importjavax.faces.event.PhaseId;importjavax.faces.event.PhaseListener;importjavax.servlet.http.HttpSession;publicclassDebugPhaseListenerimplementsPhaseListener{privatestaticfinallongserialVersionUID=1L;@OverridepublicvoidafterPhase(PhaseEventevent){FacesContextfacesContext=event.getFacesContext();//Obtem o nome da view atual.Stringview=facesContext.getViewRoot().getViewId();System.out.println(view+"depois da fase de "+event.getPhaseId().toString());}@OverridepublicvoidbeforePhase(PhaseEventevent){}@OverridepublicPhaseIdgetPhaseId(){returnPhaseId.ANY_PHASE;}}