Access Token doesn't contain a `sub` claim

Exactly.
The sub exists in the token but the middleware is mapping (renaming) sub as the claim type string to http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier (the constant defined in ClaimTypes.NameIdentifier).

If you can get the token raw string you can inspect its contents at https://jwt.io.