Ideally either I'd like nginx to not serve https at all unless the hostname matches, or for it to redirect to http at the same host.
Nenhum dos dois é possível. A conexão de um cliente que vai para o link não pode ser aceita por nada além de um certificado SSL com "foo.example.com" como um dos seus nomes. Não há oportunidade de redirecionar até que a conexão SSL seja aceita.
Se você configurar cada site para SSL, um usuário que clicar no erro de certificado receberá o site solicitado. Se você configurar um site "catch all" para SSL que forneça apenas uma página de erro e configure a hospedagem virtual baseada em nome para o site que supostamente suporta o SSL, você poderá exibir uma página de erro para os clientes.
A hospedagem virtual SSL e HTTP simplesmente não funciona bem juntos.