I did not do this with the Person field, but I did something similar with a metadata-driven field. Basically, I had to pass additional information as an object to create the value in the field.
See if passing the user ID along with the name works. I am going to try this myself, as I have the same need.
{ "MyPersonField": { "Name": "i.0#w|domain\userName", "ID": 1 } }
EDIT: Well, updating this field is easier than I thought. I was able to perform the update by simply passing the user ID in the Id field:
{ "MyPersonFieldId": 1 }
This means that the user must already be in the site collection, so if the user does not exist, the request will fail.
source share