It seems that if you have an log4net ADONetAppender configured and you try and log within the scope of a distributed transaction, the ADONetAppender is included in the transaction, and remembers it because the ADONetAppender caches the connection. This means that the next attempt to log after the transaction completes will fail because the transaction the connection refers to has already completed.
The result usually looks like this:
System.Data.SqlClient.SqlException: Distributed transaction completed. Either enlist this session in a new transaction or the NULL transaction.
On your connection string within your ADONetAppender config section set "Enlist=false". You do not want to participate in a DTS transaction (after all if it fails you probably still want to log that failure).