In the second part of the paragraph I wanted to point out that if the DOM is directly modified (ex. using jQuery) those changes get lost because the original compiled element is used for the clone.

I made a test case that shows this situation

    function makeIf(expr) {
      element.append($compile('<div class="my-class" ng-if="' + expr + '"><div>Hi</div></div>')($scope));
      $scope.$apply();
    }

    it('should restore the element to its compiled state', function() {
      $scope.value = true;
      makeIf('value');
      expect(element.children().length).toBe(1);
      $(element.children()[0]).removeClass('my-class');
      expect(element.children()[0].className).not.toContain('my-class');
      $scope.$apply('value = false');
      expect(element.children().length).toBe(0);
      $scope.$apply('value = true');
      expect(element.children().length).toBe(1);
      expect(element.children()[0].className).toContain('my-class');
    });

Am I missing something? Do you think this should to be in the docs?

Thanks for pointing out the primitive binding issue. I didn't encounter that yet. I'll look into it.