Alla fine ho estratto il codice sorgente per MySql Connector / .NET e ho scoperto che se MySqlCommand.Connection.Settings.IgnorePrepare =true (che è l'impostazione predefinita!), quindi chiamare Prepare non è un'operazione.
Il modo per risolvere questo problema è impostare in modo esplicito IgnorePrepare su false nella stringa di connessione. Questo può essere fatto abbastanza facilmente con un MySqlConnectionStringBuilder usando il seguente frammento di codice:
MySqlConnectionStringBuilder connBuilder = new MySqlConnectionStringBuilder();
// .. set up the rest of your connection
connBuilder.IgnorePrepare = false;
MySqlConnection conn = new MySqlConnection(connBuilder.ToString());