Hello,
from your description and the diagram I gather that the whole thing happens inside a single service() invocation.
The thing with CDI contexts is that they are thread-bound. Your context either is or isn't active on a thread.
CDI defines several cases for which it has to be active - such as the service() invocation or the RMI - but it doesn't say anything about the context being a new one; just active, which holds true in your scenario.
Therefore, what you are seeing is IMO expected behavior.
While executing the sequence of actions, you are still on one thread and the original req. context (that is activated by an actual HTTP request) is supposed to live until the service() method ends.
By ending it mid-way, you'd violate its lifecycle. Not to mention that it could create some weird situations if you attempted to pause/stop/restart the same context several times in one request.
Also, the same logic is applied to whenever CDI spec requires some context to be active for certain action (async events, RMI, ...) - we basically check if it already is active and only in case it isn't we activate it.
That's my understanding of it, hope it helps :-)
Regards
Matej