When a child element is triggered, the event bubbles up and all parent elements are triggered as well unless propagation is stopped.
Labels with enclosed inputs have the property of triggering a click event for the input they are attached to as well as themselves, so clicking the label triggers the event for itself and for its attached input. In this case the attached input is its child, so when it is triggered it bubbles back up to the parent which is the label. So in effect the label is triggering itself a second time.
You can see how a detached label can trigger an input's click event here: https://jsfiddle.net/yosefh/14qtas7q/ and ways to get around it here https://stackoverflow.com/a/30810281/6419701
To solve your problem, you can stop propagation on the input by adding ng-click="$event.stopPropagation()"
to the checkbox. But if you did that then the event would only be triggered by the label and not the checkbox.
Incidentally, if you change the label element to a div element you will not have this problem.
Although semantically, it is better to use a label for the purpose of a label rather than turn it into a div.
So you can simply move ng-click to the checkbox as I've done here
<div ng-app="labelApp" ng-controller="labelCtrl">
<label>
<input type="checkbox" ng-click="toggle()">Click to toggle slide
</label>
<div id="myDiv">
Clicking check box triggers sliding animation once.
<br>
Clicking label triggers sliding animation twice.
</div>
</div>
https://jsfiddle.net/yosefh/9uf9vpyk/
You can see a similar problem here: Angular.js ng-click events on labels are firing twice
If you have issues with event propagation in general you can see this post
https://stackoverflow.com/a/15193650/6419701