Per vedere se un tipo t è delegate o no, basta verificare se deriva da System.MulticastDelegate:
t.BaseType != null && t.BaseType.Equals(typeof(System.MulticastDelegate))
cioè non è necessaria la verifica singlecast (System.Delegate). La storia strana che spiega tutto ciò la potete leggere nel libro di Richter (pp. 375-376 per la traduzione italiana) e nel post di Brad Abrams.