So, as mentioned in the comments, first I tried just immediately getting a new reference to each SPList by doing:
SPList list = web.GetList(usage.Url);
SPList newList = web.Lists[list.ID];
SPContentType listLevelCType = newList.ContentTypes[newCType.Name];
if (listLevelCType == null)
listLevelCType = newList.ContentTypes.Add(newCType);
But that did ...
If anyone stumbles across this looking to simply change the content type template to an existing file - without uploading a document. You can do this more simply
$MyContentType = get-pnpcontenttype -List "My Document Library" -Identity "My Content Type"
$MyContentType.DocumentTemplate = "New Template.docx"
This is an expected behavior in SharePoint. If you are using the content type in a list, you cannot delete it directly from site.
First you have to remove the site content type from all lists & then you can delete it from site settings --> Site content types.
Alternatively, you can hide the content type from list instead of deleting it. Follow below ...
This is by design, often to discourage the use of classic features or due to potential security issues with scripting. You can run this on the site:
That will allow you to leverage these features.