I believe the error occurs because the drpPreapproverName column is a Text field rather than a Person column.
This mismatch is likely causing the issue.
I was able to reproduce a similar error:
On my test site, both drpPreapproverName and PreApproverName are Person columns, which is why the Patch code works without issues:
Please check the following:
(1) Check the column type for drpPreapproverName: I suspect it is a Text column instead of a Person column.
(2) Verify the content of drpPreapproverName?
Does it contain the email address (tom.test@example.com) or the Display Name of the approver (eg. Tom Test)
You can use either the email address (e.g. tom.test@example.com) OR the DISPLAY NAME of the approver (eg. Tom Test) to patch a Person column.
However, while Display Name might work (as I found during testing), it is NOT recommended!
I recommend always using the email address when patching a Person column, this is best practice.
(3) Update the Patch code based on the column type-for drpPreapproverName:
The issue with using the Display Name is that it is not unique. Multiple users can have the same Display Name but different UPNs and email addresses. As a result, the Patch function may only select the first matching user, leading to inaccurate data.
On my tenant, I changed two user accounts to have exactly the same display names: Lee Gu.