PrintCustomProperties() needs to change to this:
var baseType = typeof(Exception);
var properties =
from property in @this.GetType().GetProperties(
BindingFlags.Instance | BindingFlags.Public)
where property.CanRead
where property.GetGetMethod() != null
where baseType.GetProperty(property.Name) == null
select property;
This will allow the properties defined on the current Exception type that's not on the Exception type itself to print.