Answer
On a multi-tenant database, check whether the pluggable database's background job-queue setting differs from the container database's setting — a pluggable database configured to allow background jobs while its container database has that disabled (or vice versa) has caused exactly this kind of silent hang during an upgrade step that depends on background job processing.