Thank you for the clairifcation.
I think that the behavior that you are observing is because when both commands
SetOptions[EvaluationNotebook[], CellContext -> "$Mi`"];
Context[]
are in the same Cell think about the sequence of events that occur.
When the cell is executed, it's
CellContext is
Global`. The expression is then sent off to the Kernel to be evaluated in the
Global` context. The first command is then evaluated which changes the
CellContext Option for the notebook (which will take effect for the next command that is sent to the Kernel). However the Kernel still has the
Context[] command to evaluate, still in teh
Global` context, which it does and returns the result to the notebook.