If I'm understanding this correctly, you're starting a new process with the filename of the PDF, and trying to pass a verb into the process so it knows what to do (to print the PDF).
I would comment out the "CreateNoWindow" part and see what happens. Do you have anything on the server that is capable of opening and displaying PDF files? PDF's could be handled by Edge, Adobe Reader, Reader application (on 8.1), IrfanView, etc etc, and those applications will no doubt handle the "Print" verb differently.
Your sleep function will also produce inconsistent results because it is waiting for a specific amount of time. You might have better luck with something like WinWaitActive from the AutoItX toolkit (as you are kind-of doing UI automation).
Also, instead of doing
if (false == p.CloseMainWindow())
you can do
if (!p.CloseMainWindow())
This can improved code readability (The ! is essentially the same as "not", so its checking if that returned value is Not True).
EDIT: Other considerations is that IIS Express would run under your local account which would no doubt have the printers installed. The full IIS server would likely run as the Network Service account which may not have any printers installed.
You might consider it a potentially wiser design decision to maybe do something like, say, have your PDF's generated into a folder, and then have another C# application run on the server as a service to print all files in this folder as they come in. You could run that service as a user who has those printers installed. You could implement a FileSystemWatcher to only trigger when new files are put into that directory, handle the print job, and then delete the PDF. See here for how that all works (the file watching bit of it): Using FileSystemWatcher to monitor a directory