Ok, mistero svelato. Ho fatto qualche prove e' salva correttamente in session l'oggetto che pero' e' di tipo JSTLNodeList. Stampando un oggetto di questo tipo nella maniera classica non ottieni il valore del tag, ma quella stampa che hai visto anche tu ([[username: null]]). Per ottenere la stringa in esso contenuta devi modificare leggermente la select usando la funzione string() di XPath.
<x:set var="us" scope="session" select="string($doc//username)"/>
<jsp:setProperty ... value="${sessionScope.us}">
Prova cosi' che dovrebbe andare.