I am not sure, but can bet that one user event couldn't trigger another user event... I suspect that approval sales order, in the background trigger some user event (sales order context) which create work order... I had same same situation with sublist of custom record.. If I create custom record through UI, user events will be executed... but if I add lines in sublist (each line is one custom record) user events would not be executed, and I have to process all logic through client script of master record