OK, so the issue turned out to be something different. We are using QtPy and it needs the environment variable QT_API set to pyside2 for our Windows setup. For some reason the environment passed to QProcess isn't inheriting that variable and it was defaulting to pyside. Setting it manually to pyside2 by calling setProcessEnvironment on our QProcess before the start call gets everything working.
Not sure if this is a PySide2 bug or not. The QProcess.execute documentation says:
"The environment and working directory are inherited from the calling process."
but it doesn't say this explicitly for start.