Thank you very much for the project.
It's indeed a refresh issue. Simply put, when you call TXDataClient.Put or Post, the object is sent to the server, updated, but the client does not receive information about the updated data.
So, after a Put, for example, the RowVersion field is not updated.
With current version there is no way to workaround it, using the TXDataClient itself. We have made an improvement here internally, by adding new methods that will return the updated object from the server (which adds overhead, so we need to keep the old version). With that update, you will be able do something like this to properly update the RowVersion:
procedure TfrmXData.ObjectUpdate(Dataset: TDataSet; AObject: TObject);
var
Updated: TObject;
begin
Updated := FXDataClient.PutFetch(AObject);
TData_Base(AObject).RowVersion := TData_Base(Updated).RowVersion;
end;