Если вы посмотрите на сгенерированный IL, вот разница:
catch(Exception){}:
catch [mscorlib]System.Exception
{}
и просто улов:
catch{}:
catch [mscorlib]System.Object
{}
Теоретически, если вы создаете язык, который может иметь исключенияНЕ наследовать от System.Exception, будет разница ...