I really enjoyed your post. I agree that it's a good "directive smell" if your directive is reusable and application-agnostic.
In that vein, I think you're right that an isolate scope is generally a better default because it makes it clear that the directive expects no dependencies on the inherited scope, and it prevents the directive from overwriting any scope properties set by an ancestor.
I think using an inherited scope makes sense if you're building very app-specific directives that are tightly-coupled to their ancestor.