Well, I think your PO created upon approval of SO should have that field set correctly, unless in your before submit you have some 'IF' condition like when execution context is 'Create' only then the script runs. Because in case of approval the context I think comes as 'DROPSHIP' or 'Special Order'. You might wanna debug this part to understand what's happening but I am almost sure that the PO UE runs when the SO is approved and a PO is created for that SO.
As for your Item Fulfillment conundrum, I would say you should edit your UE that is creating the Item fulfillment and in that UE, before finally submitting the Record, you should set that field.
I know you created the script so you don't have to do this everywhere, but it is what it is. In all UE(s) where you are creating records, you will have to set the field manually.