The reason for the "Operation is not valid due to the current state of the object" is that for some reason, the SPOIDCRL cookies obtained from the claims based logging is not attached as a header to the request.
I don't know WHY it's not getting attached, as I see there is code elsewhere that does that. But I can reproduce the exact error message in house, if I just remove the code that attaches the cookie below. So that's the base cause.
I have some work to do now to figure out why that's happening.