With a fresh copy of your PHP sample scripts, I am getting the following results:
1) If I edit an email address (and any other field) except a list, everything works fine. The record is updated successfully.
2) If I edit an email address (and any other field) including a new list(s), the email address is added as a new contact instead of updating the original.
I struggled with trying to find out why this was happing on my website with my custom code, then realized after troubleshooting that the same issue was happening with your sample code.
Any suggestions as to why this is happening will be greatly appreciated!
I was able to reproduce your issue with both the sample code, and in the REST Client. I am not sure if this is functioning as designed, or if this is a bug however I have notified our engineers and they are looking into it more deeply.
At this time, the only workaround would be to incorporate logic that checks if a contact is trying to change lists, and email address and submit the email address change as a separate request. Although this is a cumbersome workaround, it should provide the functionality if completely neccesary.
Support Engineer, Constant Contact
Thats was exactly where I was headed next based on what your answer would be. Glad you could reproduce, helps me to know I hadn't lost my mind. (ok, the jury is still out about that - LOL) Thanks again!