If the steps that you are getting the times with aren't in your main sequence, then you are referring to the same step since you specify RunState.Main.
Also, you can't rely on the TS portion of the result for a step to be filled in until the step completes execution (or at least until you get the PostResultCallback for that step).
So, you must either look at the results of the correct steps AFTER they execute, or even easier, just call Seconds() whenever you need a time stamp. For example, in a pre-expression or a preceding statement step, use an expression like Locals.StartTime = Seconds(). When you reach the end of the region to time, use an expression like Locals.ElapsedTime = Seconds() - Locals.StartTime