I think the answer lies indeed - as you suspected - in the proxy you're using, or rather in the DataServiceContext. This is what Microsoft has to say:
By default, the client only materializes an entry in the response feed into an object for entities that are not already being tracked by the DataServiceContext. This means that changes to objects already in the cache are not overwritten. This behavior is controlled by specifying a MergeOption value for queries and load operations.
To me, this sounds exactly like the behaviour that you're describing. Fortunately, the caching can be turned off by setting the MergeOption property on the DataServiceContext.