Специфика SystemException?
По поводу первого вопроса. Нет, во время компиляции все исключения не приводятся к определенному типу. То есть бросается исключение DevideByZeroException, а потом последовательно в блоках catch ищется тот тип, к которому это исключение можно привести. 
Например, вы можете выполнять разные действия при разных исключениях. Код, в котором ловится исключение типа Exception выполнится только в том случае, если сгенерированное исключение не может быть приведено к типам, описанным ранееtry
{
	//Code
}
catch ( DivideByZeroException ex )
{
}
catch ( ArithmeticException ex )
{
}
catch ( Exception ex )
{
}
Цепочка наследованияException  ArithmeticException DivideByZeroException 
Компилятор может привести к типу, который выше. Т.Е. DivideByZeroException можно привести  к ArithmeticException и Exception, a ArithmeticException можно только к Exception, а к DivideByZeroException нельзя.