It is a relic of the past, where Microsoft intended developers to inherit all their custom exceptions from ApplicationException. Shortly after, they changed their mind and advised that custom exceptions should derive from the base Exception class.
I should have elaborated, but basically what MD87 replied. During the development of .NET it was decided that every exception caused by programs should inherit from ApplicationException, and all system errors should inherit from SystemException. Unfortunately .NET devs didn't follow this and now everything should just inherit Exception since it's easier to check. Interestingly, both SystemException and ApplicationException seem functionally identical to Exception.