Estás cometiendo al menos tres errores:
1. El formato aplicado no debe ser
Código:
Format(fecha, "yyyy-MM-dd hh:mm:ss")
sino
Código:
Format(fecha, "yyyy-MM-dd HH:mm:ss")
Esa "HH" es crítica, porque es precisamente la que te hace desaparecer el AM/PM del string, y que es una de las cosas que te está causando problemas.
2. Suponiendo que vas a enviar la fecha como string, la reconversión a DateTime es absolutamente innecesaria. MySQL puede tomar el valor como string con el formato correcto y meterlo en un DateTime por conversión implícita. Incluso en ese caso, si dejas que VS lo convierta directamente a string, va a poner las horas en formato AM/PM, que MySQL no maneja.
3. Si estás introduciendo en la base el valor como DateTime, puedes tener problemas con la regionalización, a menos que manejes el CultureInfo de la conversión correctamente. Es decir, si la aplicación por alguna razón pretende cargarlo a la variable como "es-AR", "es-MX" o cualquier otra cosa que no sea "en-US", puede haber un error de conversión y volverse un valor incompatible.