We are facing many defects with the PM Module, e.g. the PM Schedule not being updated. But in that case, it just generates a new PM Work Order next run. Did it create 2 in the same run for you? (I don't recall ever having seen that)
Can you check if the PM Schedule gets updated (to the original date plus the recurring period)?
We have currently a similar issue and it seems to be caused by a defect/wrong design in the PM Process where the PM Process initially ignores the "Create Work Order 'n' days before scheduled date" so starts processing each and every PM Plan, and when the number becomes to high, it fails to update the PM Schedule.
ServiceMax have suggested a workaround for us, to create an additional Rollup Summary Field on the PM Plan that holds the MIN value of the Scheduled On from the PM Schedule. That field then has to be added in the criteria for all the PM Processes (with the same 'n' days)
Agree this is just a bandage and you have to modify the value on two places now every time you make a change, but ServiceMax claims that this would prevent the defect to forget updating the PM Schedule.
More information can be found here:How Can I Limit the Number of PM Plans That Are Queried When a PM Process Runs, to Just the Ones tha...
Check and see if the PM Schedule Definition is populated in the PM Schedule record on the PM Plan in question. If you did a bulk data load, this is easy to overlook. Screenshot below for reference.