Hola.
A medida que el número de condiciones aumenta la sentencia CASE empieza a resultar más apropiada generalmente por diversos motivos: hará tu código más legible, resultará más sencillo modificarlo al estar dividido en diferentes cláusulas independientes...
A priori todo algoritmo que se pueda solucionar con un CASE es también posible resolverlo con una serie de IF's. Ahora bien, cuando hablamos de IF's anidados (pongamos por ejemplo, un programa que realice una comprobación de errores de mayor a menor prioridad) la sentencía CASE no permite realizar este anidamiento de errores ya que de todas las cláusulas que tenga el programa solo entrará en una (cláusulas independientes), y solo una, cada vez que se ejecute ese CASE. En este caso, resulta más apropiado utilizar IF's anidados.
De todas formas, lo mejor es estudiar cada caso y pensar qué sentencia resulta más apropiada.
Saludos.