Я сталкивался и выяснил что спина не работает и не должна в общем-то. Все нужно делать явным образом.
Загрузилась страница (или вызвали инит) - cur={url:location.href,title:D.title}; и следом заменили чтоб спины не было - history.replaceState(cur,cur.title,cur.url);
Надо закрыть модальное окно - history.replaceState(cur,cur.title,cur.url);
Соответственно в онпопстейт либо загрузка по урлу - канонично, либо тот же самый возврат через замену. У меня канонично
onpopstate=function(e){
location.assign(e.state.url);
},