After much head banging, I solved this issue by setting the ‘credentials’ property of the request to ‘include’. I was under the impression that this only controlled the sending of cookies to the server on fetch requests, but apparently, at least in the implementation I am using, if not set it also means that cookies will not be saved if they are sent back from the server.
From the spec at https://fetch.spec.whatwg.org/
A request has an associated credentials mode, which is “omit”,
“same-origin”, or “include”. Unless stated otherwise, it is “omit”.Request’s credentials mode controls the flow of credentials during a
fetch. When request’s mode is “navigate”, its credentials mode is
assumed to be “include” and fetch does not currently account for other
values. If HTML changes here, this standard will need corresponding
changes.Credentials are HTTP cookies, TLS client certificates, and authentication entries.