Perhaps a JSFiddle would help us understand each other better. We had a short conversation with LLoyd about this, so I will try to illustrate the context and what is that we don’t understand. Here is the JSFiddle:
http://jsfiddle.net/gurdiga/9KeKM/.
As you will see in your browser console, when you click “Increase magic!” button it increases magicLevel in the parent scope, and also changes the myMagic directive’s incantation attribute that interpolates it. Then, in the link function the incantation attribute is watched for changes with both $scope.$watch and attrs.$observe, which both are triggered, and this is the very phenomenon that LLoyd and I were wondering about: which observation method is appropriate to use?