Thanks Jacques, for reviewing it.
Yes I found the method VerifyPickSessionRow.issueItemToShipment which is doing the same thing.
But I found a bug too and also the reason for it, actually when you verify an order by passing "PicklistBinId" then it updates the status of picklistitems, but if we verify an order by passing a orderId then the status of the picklistitem never changes to Complete.
The reason is that when we pass orderId the "picklistBinId" is not get set in the verifyPickSession so its not available at the time "issueItemToShipment" is called so its not changing the status to complete.
So I created a patch will will fix this issue.