The GetNewCartService seems to be called before my handler in
ChangeMerchantMacro. Is there anyway to get arond this? The
complete handler modifies some model data that GetNewCartService
needs, but GetNewCartService is run before the previous Macro is
technically complete.

Does atomic only have to do with if one of the commands in the
macro fails?

If so then it won't matter in this case as all macros/commands
are succeeding. It's just the "race condition" of the internal
macro's registered callback being invoked after the parent macro
instantiates/executes the next command.