If I understand your question, the answer to the first step is in your question description.
Each service modifies shared data without publishing the results to other services.
Do not try to sync data across services until you know which service owns each piece of data.
The simplest first step is to move to a single database.
Get all the services to share a single transactional data store or have each service publish their outcomes (not transient state but the end state once they finish processing the data) to a common read model that reflects the eventual correct state of the data.
This is the first step toward a more manageable outcome.
Once you have this working, you can look at the service boundaries and figure out which service owns which data (not entities, but fields).
Make sense?