One of the issues with SharePoint 2007 workflows was the actions within a workflow could process out of order due to the asynchronous nature of the workflow processing. In order to work around these “race” conditions you had to put a checkpoint or commit in your workflow. This usually means you put a pause in your workflow to make the workflow serialize and de-serialize in the database, thus causing a commit to occur.
The same issue exists with SharePoint Designer 2010 workflows. I just had an “update list item” action update the incorrect list item, even though it was specified with a unique key. In many of my workflows I create a name/value pair list that stores values I need to pass around. In this case I had a “LastMonthProcessed” entry and a “MonthlyControlsListURL” entry. Each time I updated the “MonthlyControlsListURL” key the value would end up in the “LastMonthProcessed.” After putting a 1 minute delay (pause for duration) action after the update of the “LastMonthProcessed,” all of the updates occurred correctly.
You’d think some clever MS programmer would fix this issue once and for all…or they would a least give you a commit action in SPD. Arghhhhh!