Acontece que o problema estava em como o padrão foi fornecido; foi lido de um arquivo com as substituições em minúsculas em uma linha e as maiúsculas na segunda linha. Lendo com
line1="$(<pattern.txt)"
resulta em espaços em branco entre os padrões de letras minúsculas e maiúsculas, fazendo com que todos os caracteres pareçam alterados.
A solução é remover o espaço em branco depois de ler com
line1="${line1// /}"