I haven't had the time to file a bug yet, but this might help anyone else who bumps into this...
The problem seems to be triggered by the target being set to be deployed. I'm referring to the Build Settings whose xcconfig equivalents are DEPLOYMENT_LOCATION and INSTALL_PATH, e.g.:
DEPLOYMENT_LOCATION = YES
INSTALL_PATH = $(LOCAL_APPS_DIR)
The deployment location might also play a role, though this is speculation "inspired" by macOS security policies.
In our case, the framework whose default Metal library was not being created, was set up to be deployed to the Frameworks directory for the current user, i.e.
INSTALL_PATH = $(LOCAL_LIBRARY_DIR)/Frameworks
...and this is enough to trigger the failure.
This problem seems to affect more than just the Metal compiler. I noticed it too with the Storyboard compiler for a silly Swift app. Since the app was set to be deployed to $(LOCAL_APPS_DIR) the storyboardc invocation was failing to copy the compiled storyboard to the app bundle.
Whether this is a bug in recent versions of Xcode, or a side effect of these various tools being unable to touch files at those locations, the solution is to add built phases to "do what the underlying compiler is no longer doing" ;-)