@Rakefet via the virtual water cooler talk, this response seemed useful:
Normally, I would expect DLL resolution to work fine for a DLL co-located in the same directory as an executable. One approach the user might take is to try and modify the PATH environment variable prior to executing the subprocess call, this can be done for example with
from subprocess import Popen
from os import environ
my_env = environ.copy()
my_env["PATH"] = "C:/location/of/DLL;" + my_env["PATH"]
Popen(my_command, env=my_env, shell=True)
Hopefully that is sufficient. A more involved approach is using Process Monitor to see the DLL loads (and failures) as they occur.