Answering myself as we worked it out in the comments:
When MATLab makes system call with system() or !, it prepends to the PATH environmental variable "C:\Program Files\MATLAB\R2019b\bin\win64". Because the PATH is read left to right, any .dlls in this folder will be found first by the OS as it tries to execute whatever program you are running. This folder includes (somewhere) a .dll which defines libstdc and libstdc++, and these defininitions will be used over the OS versions in C:\Windows\system32. If your executable was compiled with a recent version of c++, like c++20, it won't won't be able to run (assuming it wasn't staticly linked). Apparently on Windows this fails silently, hence the lack of useful error messages.
The solution to this is to change the PATH variable before running the executable.
One option is to write a batch script that sets the PATH and then runs the exec (versetile, but adds another file to keep track of)
Another option is to simply set the path immeditely before executing the exec. Thankfully getenv('PATH') returns the actual system PATH.
system(sprintf('set PATH=%s & qafm.exe'), getenv('PATH'))