O que faz
Codificar transforma texto em referências de caracteres HTML: só os cinco reservados (& < > " '), esses mais tudo que não é ASCII, ou tudo. Elas podem ser escritas por nome (é), em decimal (é) ou em hexadecimal (é). Decodificar usa a tabela completa de 2125 nomes do HTML5 e as mesmas regras dos navegadores, inclusive em valores de atributo. Abaixo aparecem os escapes equivalentes para strings JavaScript e para content no CSS.
Quando são necessárias
Numa página UTF-8 qualquer caractere pode ser escrito direto. O que sempre precisa de escape é & e < no texto, e as aspas do atributo no seu valor. Os 106 nomes herdados do HTML 4 funcionam sem ponto e vírgula, exceto em atributos antes de = ou de letra ou dígito, o que protege URLs como ?a=1©=2.
Escapar não é sanitizar
Escapar os caracteres reservados protege o texto da página e atributos entre aspas contra XSS, mas não dentro de <script>, de style, de manipuladores de eventos nem de URLs.