Gracias por todos los comentarios. He estado trabajando con alguien de MSFT en los foros de MSDN para averiguar qué está pasando. Resulta que el problema se debe a que una de las inserciones falla debido a un problema de conversión de fecha y hora.
El principal problema es el hecho de que este error aparece si se trata de un error de conversión de fecha. Sin embargo, si se trata de otro error, como que un campo sea demasiado largo, no causa este problema. En ambos casos, esperaría que la transacción aún exista para poder llamar a Rollback.
Tengo un programa de muestra completo para replicar este problema. Si alguien desea verlo o el intercambio con MSFT, puede encontrar el hilo en los grupos de noticias de MSFT en microsoft.public.dotnet.framework.adonet bajo el hilo de error SqlTransaction.ZombieCheck.