Thank you - after a little research I figured out that rules run before code. My rules were ending with submit and close which was why the printing didn't happen.
I like your idea and I would be interested how to write c# code to set a value on a node (like a button?) because it may be the solution to my newest problem. In the meantime I took out the submit action rules which included closing the form, and left in the rules which populated the other fields. Now I programmatically submit the form:
On the button click event, after the print call, I call a method to submit the form (FormEvents_Submit()) and it workswith warning exception error which I catch using try/catch. It doesn't stop the form from printing or submitting "an object reference is not set to an instance of an object" which I should investigate more....
---edit: I removed the rest of this post because it relates to a different problem. Will post a new thread for it.