The server(Openlitespeed) I was using was at fault. I'm unsure why, but the docker-registry running behind OLS always fails with content-length header issues. The simple solution was to use nginx-proxy-manager.
Also, if someone is trying to self-host a docker registry, be aware of Cloudflare's max upload size.