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.