The answer is simple, you are injecting into a suspended process. A suspended process's environment is not ready for normal execution, only when the program reaches entry point will it be ready.
There are two solutions. Solution one is the simplest, let the application run and remove the CREATE_SUSPENDED flag. Solution two entails the suspension of the process, the patching of the entry point to be an infinite loop, dll injection via CreateRemoteThread on an export, check eip against entry point, resumption of the process (main thread), and finally the removal of the infinite loop by restoring the instructions overwritten (do this safely by suspending main thread).