I figured it out. Apparently, the subprocess module does not work/recognize virtual environments, so when I do "python -m modulename" in it will launch the system-wide interpreter instance, and not the one in the Robot venv. This causes the merge failure and the results observed. When launching via batch file, everything works properly and hence different behavior.
For those of you encountering this issue, the solution is to use sys.executable instead of 'python' when working with subprocess calls. So the above command would look like this:
[sys.executable, '-m', 'robot.rebot', '--output', 'newoutput.xml', '--merge', 'output.xml', 'rerun.xml' ]
If you are using Pabot, remember that pabot is a package that also contains pabot.py module, so the pabot command would look like this:
[sys.executable, '-m', 'pabot.pabot', '--output', 'newoutput.xml', '--merge', 'output.xml', 'rerun.xml' ]