Я думаю, что нашел ответ. Составное действие должно создавать новый ActivityExecutionContext для дочернего действия каждый раз, когда оно хочет запустить дочернее действие.
Выполнение дочернего действия в новом ActivityExecutionContext:
ActivityExecutionContext context2 = executionContext.ExecutionContextManager.CreateExecutionContext(a);
// listen for the child's activity completion by implementing IActivityEventListener<ActivityExecutionStatusChangedEventArgs>
context2.Activity.RegisterForStatusChange(Activity.ClosedEvent, this);
context2.ExecuteActivity(context2.Activity);
Уборка после закрытия мероприятия:
// get the activity from the ActivityExecutionStatusChangedEventArgs, then...
activity.UnregisterForStatusChange(Activity.ClosedEvent, this);
ActivityExecutionContextManager executionContextManager = executionContext.ExecutionContextManager;
// close the child activity's execution context
executionContextManager.CompleteExecutionContext(executionContextManager.GetExecutionContext(activity));