I usually judge when it is becoming evil by the amount of method overridiing that has to be done. If you find yourself overridding nearly every method with functionality that is completely different to the parent then you are in an evil place. If however your method overriding is mainly introducing a bit of polymorphism and extending methods to handle extended structures in your object then I think you are in a good place.
Thats just a personal metric based on lazyness.
I agree multiple inheritance is good and a nice way to package together your clasess.
not too sure bout delegation will need to check that oot sounds like it's just run time method dispatch