This has just happened to me as well, and I think the reason is that, when a download failure happens (500, 502, 504, etc.), the thread doing the download directly writes to the current error port.
And as we know, ports are not thread-safe in Guile 2.0 and we’re not doing additional synchronization here, so everything wrecks havoc. This is another incentive to merge wip-http-pipelining. I’ll give it another try. Thanks, Ludo’.