Long story short, I have an event receiver on a list item which listens for the ItemAdded event, makes some additional changes to the newly created item, calls
listItem.SystemUpdate() and starts a workflow on that item.
The problem is that, even though I do these things in the same thread, the workflow sometimes sees the list item the way it was right after creation, and goes on using that stale data. My guess is that
SystemUpdate doesn't really save the changes to the database, or doesn't do it in a transaction scope, or does it asynchronously. Am I right? If so, how can I force commit the changes to the database?