Solution
In order for an execution to break, all threads must be between steps. In other words, the execution cannot break while one of its threads is calling a module. It must wait for the module to return.
There is a way around this by using the TestStand API property Thread.ExternallySuspended. This tells the TestStand engine to treat the thread that is running your code module as if it were an already suspended thread. When a thread is externally suspended, TestStand no longer requires it to be between steps for the execution to break.
Use the TestStand Engine API in your external module to set Thread.ExternallySuspended to equal to True before the code in your module starts running and then set it to False immediately before returning from your module. You can get a reference to the Thread object from the Sequence Context (i.e. SequenceContext.Thread).
An example of this can be found in <TestStand Public Directory>\Examples\Fundamentals\Pausing Executions with Running Code Modules