A expressão regular não precisa corresponder à string inteira. É por isso que você tem ^ e $ para o início e o fim da sequência, respectivamente.
[[ CoNfUsInG =~ ^[[:lower:]]*$ ]] || echo no
CoNFUsInGlY, ^[[:lower:]]* (sem o $ ) ainda corresponde, pois há zero letras minúsculas no início da string.