It would appear that something else is the script is opening a handle to something that the MSI restart manager wants to update, and it is terminating the Powershell process.
What does the script do before it hits the try/catch portion that you posted? Can you simplify the script to just call msiexec?
Try this, download handle.exe and put it on the server somewhere.
https://learn.microsoft.com/en-us/sysinternals/downloads/handle
In the script add a transcript (start-transcript) if you haven't already added one. Then right before you call msiexec, call handle.exe. That will show all handles for the current Powershell pid.
c:\utils\handle.exe -accepteula -p $pid
Do you see any files/folders/registry in the transcript that are related to what the MSI might update?