Your original question asked why the child process does not inherit the working directory of the parent. Well, if you pass NULL to CreateProcess then the new process will inherit the working directory of the parent process at the time that the call to CreateProcess is made. The documentation makes this quite clear and there are no surprises here. CreateProcess behaves precisely as advertised.
The edited question concentrates on DLL search. It's not easy to answer this new take on the question from this information. The best thing to do is to run the program under the profile mode of Dependency Walker. This should reveal what is wrong. You may well find that the problem is not at all what you expect it to be.
And for future reference, I recommend that you include full details of any errors when you ask a question. You stated that an exception was raised but really you need to supply the full details of any exceptions.