hola,
No entiendo el  sesion.Abandon();
Se supone que cancel ala sesión, pero después de ejecutarlo recojo el estado de la sesión con 
System.Web.SessionState.SessionStateMode estado = sesion.get_Mode();
y me devuleve InProc que según he leido se corresponde a 
"El estado de la sesión está en proceso con un proceso de trabajo de ASP.NET.   InProc es el valor predeterminado."
¿Al abandonar no debería tener estado Off ?