Puede que sea por que en el caso** cifra >=0 or <=9** se cumpla siempre, ya que todos los número que meter son mayores que 0 y el or <=9 no limita nada ya que todos los menores de 9 son a su vez mayores que 0.
Para que lo veas mejor:
Caso tal cual lo tienes escrito: ese caso es verdadero para la siguiente hipótesis, Números mayores que 0 (0 al infinito) O numero menores que 9 (menos infinito a 9), por lo que afecta a todos los número (menos infinito al infinito).
Como debería ser; Números mayores que 0 (0 al infinito) Y números menores que 9 (menos infinito a 9), pero como el Y implica que que deben cumplir las dos condiciones el conjunto de números afectado por el caso se limita a los números del 0 al 9.
Tu codigo debería quedar algo así:
var
cifra,numero:numerico
inicio
cls()
imprimir("Escriba un numero que oscile entre 0 y 9.999 para saber cuantas cifras tiene")
imprimir("\n\nIntroduzca un numero ")
leer(numero)
cifra=numero
eval
{
caso(cifra>=0 and cifra<=9)
imprimir("\n\nEste numero solo tiene una cifra")
caso(cifra>=10 and cifra<=99)
imprimir("\n\nEste numero solo tiene dos cifras")
caso(cifra>=100 and cifra<=999)
imprimir("\n\nEste numero solo tiene tres cifras")
caso(cifra>=1000 and cifra<=9999)
imprimir("\n\nEste numero solo tiene cuatro cifra")
sino
imprimir("\n\nNúmero fuera del rango 0 y 9.999")
}
fin
Por cierto, ¿por que divides el valor introducio entre 10?