You set it to print on payment. So you should expect it to print on payment. You should probably use states to determine if it should print or not. I mean it could change to Printed state if it already printed and on payment it would check that state to determine if it needs to print or not