Because you are changing a variable from child scope the parent scope variable never changed.. Scope's has inheritance. You can get information from docs
Edit
To be more spesific. Controllers, some directives('ng-if', 'ng-include', vs.), isolate scopes creates its own scope.
If you want to referance a variable you need to use it with variables owner.
There is a live answer below. You can see controller has created its own scope and the parent scope cant detect changes because it has a different owner(this) now.
var app = angular.module("app",[]);
app.controller("ctrl", function($scope){
$scope.checkData = false;
})
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
</head>
<body ng-app="app" >
parent1:<input ng-model="checkData" type="checkbox"/>
<div class="child">
<div class="child">
<div class="innerChild">
inner1:<input ng-model="checkData" type="checkbox"/>
</div>
<div class="innerChild">
inner2:<input ng-model="checkData" type="checkbox"/>
</div>
</div>
</div>
Controller Scope -><br>
parent2:<input ng-model="checkData" type="checkbox"/>
<div ng-controller="ctrl" >
<div class="child">
<div class="child">
<div class="innerChild">
inner1:<input ng-model="checkData" type="checkbox"/>
</div>
<div class="innerChild">
inner2:<input ng-model="checkData" type="checkbox"/>
</div>
</div>
</div>
<div class="child">
<div class="innerChild">
inner3:<input ng-model="checkData" type="checkbox"/>
</div>
</div>
</div>
</body>
</html>