The manifest reference in the html tag adds that page to the appcache even though it's not listed in the manifest file. Viewing chrome://appcache-internals/ in the browser displays the appcache and the html page as the master item.
Chrome and Safari appear to be ignoring no-chache no-store http headers when using appcache. When injecting an iframe to load a separate page containing the manifest, the main page elements weren't being retrieved from Chrome's cache.
The solution was to check the cookie or sessionstorage state in javascript to ensure the user wasn't directed to the cached page when logging back in.