This is because we are setting ViewState.FirstCheck not until a view has been fully change detected.
Solution:
detectChanges(view: ViewData) {
view.wasFirstCheck = view.firstCheck;
view.firstCheck = false;
// dirty check all directives, use view.wasFirstCheck instead of view.firstCheck.
}