For future reference:
It turns out we had many files from the Engine\Binaries\ThirdParty\USD\ directory in the depot, and their sizes differed from those in the precompiled binaries. As a result, during syncing via UGS, they failed to delete and remained read-only, which led to a crash.
The crucial detail I was missing was the log entries: “Skipping X due to modified length.”
After deleting the USD folder from the depot, everything started syncing correctly.