Грубо говоря, Type Soundness = Type Preservation + Progress. Так что если зацикливающееся вычисление не меняет свой тип (Progress тут очевиден) — всё полностью sound.
Да, soundness ломается именно тогда, когда мы предполагаем, что все вычисления завершаются, а они не завершаются. На этом можно сделать type confusion aka unsafe coerce.