Consider the following scenario, due to @natechapin:
// start on index.html
location.hash = "#foo";
history.back();
location.hash = "#bar";
Where do you end up?
Apparently in Firefox you end up on index.html#foo and in Chrome you end up on index.html. Probably similar issues occur for history.pushState().
@jakearchibald, I suspect this has a more-correct answer in the framework you're working on... any thoughts on what it should be?