I'd go with a staging object and compare each proposed value against the current SFDC value before anything writes. The sheet works as an interim CRM, but it's a risky bridge into SFDC since it goes stale fast.
The bigger question is where wrong updates come from: the agent misreading the rep, the rep giving bad info, or stale data already in the CRM? If you log the raw rep message, the agent's parsed update, and the prior value, you can tell which one it is and decide which fields are safe to open up.