@ANeves: I hate when people nit pick about camel/pascal/hungarian/etc notations. The only general rule that matters is - "Your code should match the style of the project. The project should have one concise style."
Heres what I would use:
public bool changed(bool cascading)
if (myValue.Id.IsImport || isChanged) return true;
if (isNull) return isNull != wasNull;
if (!myValue.Equals(initialValue)) return true;
return cascading ? ((IBLObject)myValue).Changed() : ((IBLObject)myValue).Id.Changed();
I feel this is the best answer because it clearly breaks out the boolean logic he had above without changing the thought process behind it. It simply refactors his checks into easy to follow lines.
@Jesse Slicer: I prefer this method to the one you suggested because it has obvious performance benefits. All the additional 'if' statements in yours will result in a mess of JMPs that will slow down execution. I also feel this is much easier to read and understand with a passing glance.