A resposta exata é "nunca". Você pode citar ou \
-escape alguns caracteres especiais como "" ou ";" em strings (caracteres que tornariam o significado de uma declaração ambíguo), então
add_header X-MyHeader "Test String;";
funcionaria como
add_header X-MyHeader Test\ String\;;
Na realidade: use apenas citações :)
Edit: Como algumas pessoas adoram deduzir: A lista não necessariamente completa de caracteres que podem tornar uma declaração ambígua está de acordo com o meu entendimento da sintaxe nginx
config:
<space> " ' { } ; $ \
e pode ser necessário escapar de $
e \
mesmo em strings entre aspas para evitar expansão variável.
Infelizmente, não consigo encontrar uma lista completa e autoritativa desses caracteres nos documentos.