Did a bit more investigating:
At first, I thought this bug was due to the fact that we're not setting require_authentication for the collections resource, therefore the requests were never returning private collections. Surprisingly, I found out that require_authentication actually has no effect, whether you force it to remain True or False. That's because when Picard first starts, it makes an authenticated request to get a list of the user's collections. QNetworkAccessManager caches the session cookie from that request, which all future requests send.
I compared the request headers sent to the test server to those on beta, and the test server is missing an Authentication header. On beta, you can force it to return private collections by including an inc flag which requires auth, like user-tags. With "inc=collections" alone, it doesn't want to use the credentials.
This is still an issue in latest Picard.
MBS-6152was fixed, but Picard needs to explicitly set inc=user-collections. Fix in:https://github.com/metabrainz/picard/pull/1052