Você não leu atentamente a página de manual, mas também disse:
Any part of the pattern may be quoted to force the quoted portion to be matched as a string.
Assim, o $
na sua string significa o sinal de dólar literal em vez do final da string. Movendo o $
da string para que funcione:
$ [[ "$n" =~ 'llo'$ ]] && echo yes || echo no
yes