Does MC set the state to START even before the start() lifecycle successfully completes?
No, after -- see AbstractController::incrementState.
try
{
install(context, fromState, toState);
fromContexts.remove(context);
Controller toController = context.getController();
Set<ControllerContext> toContexts = toController.getContextsByState(toState);
toContexts.add(context);
context.setState(toState); // HERE