I'm assuming that the server assigns the unique identifier for new objects, so when you create an object locally it doesn't have one to begin with.
The FRC is designed for updating table views. So, when you do a fetch you will get a number of inserts for objects that weren't in the FRC data set before but are now. Your code is misinterpreting this as new objects when really it isn't (most of the time).
You should check if the unique identifier is set and only POST a new object when it isn't. Technically you shouldn't get duplicates anyway if you are sending the unique id to the server as it could then identify the dupe.
For updates, you should consider adding a changed
flag to your entity that is set whenever any attributes that should be uploaded are modified and reset after the upload is successful. Use this to filter PUTs.