Ah, that is very useful info.
If you read this bit of the Go docs, that will start to make sense
If the returned error is nil, the Response will contain a non-nil Body which the user is expected to close. If the Body is not both read to EOF and closed, the Client's underlying RoundTripper (typically Transport) may not be able to re-use a persistent TCP connection to the server for a subsequent "keep-alive" request.
So if rclone is sent stuff in a body that it doesn't read then the connection can't be re-used.
Luckily this is all abstracted through an internal library and adding a bit of draining the bodies there appears to have fixed the problems with the rclone server at least.
This is one bit of the puzzle I'm not sure about. I think the http library can drain http connections on its own (but I can't find that bit of code). Maybe it only does that if they have been idle for a while.
Please give this a go:
v1.63.0-beta.6867.abbf80afb.fix-webdav-keepalive on branch fix-webdav-keepalive (uploaded in 15-30 mins)