Making an atomic transaction out of several operations
You can remove repeated code if you record all your actions for executions and then execute them all at once with some generic exception handling. The idea is below. 

Sorry for some possible lapses, didn't write in C# for quite some time. However I hope that you'll find the whole idea to be helpful.

  EnumResult TransactionThatRollsBack()
    {
         var undoLog = new SmartStack();
         undoLog.Push(() =&gt; MoveInventory(inv,dest,src), EnumResult.1);
         undoLog.Push(() =&gt; NotifyReportingOfUnMove(inv, user), EnumResult.2);
         undoLog.Push(() =&gt; RemoevUserFromSweepstakes(user), EnumResult.3);

         undoLog.execute();
    }

    class SmartStack {
       SortedDictionary&lt;Action, EnumResult&gt; actions; 

       void push(Action a, EnumResult r) {
         actions.add(a, r);
       }

       void execute() {
         Stack&lt;Action&gt; completedActions = new Stack&lt;Action&gt;();
         foreach(KeyValuePair&lt;Action, EnumResult&gt; pair in actions) {
             try {
               pair.Key.Invoke();
               completedActions.push(pair.Key);
             }
             catch(Exception ex) {
               for (Action a in completedActions) {
                   Undo(a);
               }
               return pair.Value;
             }
         }
       }
    }