This has come up plenty of times on Hacker News with plenty of examples. modersky generally just writes it off as being "harmful" to the community and other nonsense to avoid the issue. Harmful to his valuation is more like it.
Static (and even dynamic) type safety is always a shade of gray vs. a black and white thing. A language that is 100% type safe is a language that doesn't do very much (...or requires a theorem prover). Scala is very pragmatic in that regard.
I'm not sure what world you're living in, but Haskell and ML seem to offer some measure of type safety and are also quite practical. Sure there is unsafePerformIO. But the problem is with Scala you don't even need to use unsafe language features to get an unexpected class cast exception. Given that you worked on Scala I'm rather surprised you don't know about this already.
Could you be more specific? Is the compiler promising more than it can deliver, or are you saying the compiler could check something but simply doesn't?
You can have 100% type safety in a straight jacket, but scala pushes what it tries to type check to an extreme limit; "safe" but then also not as conservative as Haskell or ML. I see scala as the c++ of statically typed languages, filling that niche where you need more from your managed language and are willing to take a leap, but this is controversial and a personal opinion.
I never, ever had a ClassCastException in Scala that I wasn't warned about by the compiler. Maybe in theory you are right. But what counts is practice.
Scala is type-safe, but type-safe with escape hatches (which every good language has sometimes, when the programmer knows the truth of theorems the type-checker can't prove). It also has an undecidable type system, but then, so does half of everything nowadays.
It isn't even about "escape hatches". There are programs that can be written without any special language features that will cause class cast exceptions. Please do your research.