Gracias a Dios, gracias a la respuesta de @user_0 y la respuesta y el comentario crípticos de @user3494351 y esta antigua publicación en el foro. Finalmente descubrí esto después de varias horas de golpearme la cabeza contra la pared.
El problema es que a BCP le gusta agregar 8 bytes adicionales al archivo de manera predeterminada. Esto corrompe el archivo y hace que no se pueda abrir si solo usa el indicador nativo -n.
Sin embargo, BCP le permite especificar un archivo de formato como salida que le permite indicarle que no agregue los 8 bytes adicionales. Así que tengo una tabla que creé (para usar en un cursor) en SQL Server que solo tiene UNA FILA y UNA COLUMNA con mis datos binarios. La tabla debe existir cuando ejecuta el primer comando.
En la línea de comandos, primero debe hacer esto:
bcp MyDatabase.MySchema.MyTempTable format nul -T -n -f formatfile.fmt
Esto crea formatfile.fmt en el directorio en el que se encuentra. Lo hice en la unidad E:\. Así es como se ve:
10.0
1
1 SQLBINARY 8 0 "" 1 MyColumn ""
Ese 8 ahí mismo es la variable que bcp dice cuántos bytes agregar a su archivo. Es el bastardo que está corrompiendo tus archivos. Cambia ese tonto a un 0:
10.0
1
1 SQLBINARY 0 0 "" 1 MyColumn ""
Ahora simplemente ejecute su script BCP, suelte el indicador -n e incluya el indicador -f:
bcp "SELECT MyColumn FROM MyDatabase.MySchema.MyTempTable" queryout "E:\MyOutputpath" -T -f E:\formatfile.fmt