The primary difference is that classes can only inherit from a cingle class, while you can implement many interfaces.
There is a good discussion of the pros and cons here.
1) Typically, these are concrete classes - they may use interfaces/abstract classes to form a consistent framework (a BusinessBase class, a BusinessCommand class, etc), but I'm not sure what you are getting at.
2) Typically use an abstract class when you want to inherit some implementation. Typically an interface when you don't want to restrict the application classes from inheriting from other things.
3) Yes, that's the main benefit, but there are drawbacks due to the single inheritance model.