Graças a Deus, graças à resposta do @user_0 e à resposta e comentário enigmáticos do @user3494351 e a este antigo post no fórum, finalmente descobri isso depois de várias horas batendo minha cabeça contra a parede.
O problema é que o BCP gosta de adicionar 8 bytes extras ao arquivo por padrão. Isso corrompe o arquivo e o torna incapaz de ser aberto se você usar apenas o sinalizador -n nativo.
No entanto, o BCP permite que você especifique um arquivo de formato como saída que pode permitir que você diga a ele para não adicionar os 8 bytes extras. Então eu tenho uma tabela que criei (para ser usada em um cursor) no SQL Server que tem apenas UMA LINHA e UMA COLUNA com meus dados binários. A tabela deve existir quando você executa o primeiro comando.
Na linha de comando primeiro você precisa fazer isso:
bcp MyDatabase.MySchema.MyTempTable format nul -T -n -f formatfile.fmt
Isso cria formatfile.fmt no diretório em que você está. Eu fiz na unidade E:\. Aqui está o que parece:
10.0
1
1 SQLBINARY 8 0 "" 1 MyColumn ""
Esse 8 ali é a variável que bcp diz quantos bytes adicionar ao seu arquivo. É o bastardo que está corrompendo seus arquivos. Mude esse otário para um 0:
10.0
1
1 SQLBINARY 0 0 "" 1 MyColumn ""
Agora apenas execute seu script BCP, solte o sinalizador -n e inclua o sinalizador -f:
bcp "SELECT MyColumn FROM MyDatabase.MySchema.MyTempTable" queryout "E:\MyOutputpath" -T -f E:\formatfile.fmt