Answer
Use the dedicated Shop_Order_History_API.Generate method instead of calling the New__ method directly (or trying to defer the insert as a background job) — this is the standard, supported API specifically built for creating Shop Order History records, and it sidesteps both the mutating-table problem and the argument-handling issues that come from working around it with a deferred call.