This method doesn't require initialization of the tracker, which is handy if the state should be changed outside of the site context (for example in the shell).
var stateManager = AutomationStateManager.Create(contact);
automationStateManager.MoveToEngagementState(stateItem.ParentID, stateId);
stateManager.SaveChanges(AutomationManager.Provider);