El problema con caratéres especiales es la condificación de los caracteres, moodle recomienda que se trabaje con utf8_unicodeci, seguramente por ahi va tu problema, eso lo puedes probar fácilemente accediendo a la BD a través de phpmyadmin u otro gestor de BD, todas las tablas de tu BD deben tener el mismo cotejamiento, caso contrario siempre tendrás problemas como lo que mencionas.
Si esa es la situación que presentas te paso un script que me sacó de un apuro similar al tuyo en una ocación, el mismo lo que hace es recorrer por cada tabla y campo de tu BD y cambia el tipo de Cotejamiento que utiliza, de ahi en adelante si utilizas algún caracter especial debería guardarse y mostrarse correctamente.
<?php
// your connection
mysql_connect("localhost","DBDBUSERNAME","DBPASSWORD");
mysql_select_db("DBNAME");
// convert code
$res = mysql_query("SHOW TABLES");
while ($row = mysql_fetch_array($res))
{
foreach ($row as $key => $table)
{
mysql_query("ALTER TABLE " . $table . " CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci");
echo $key . " => " . $table . " CONVERTED<br />";
}
}
?>
Saludos cordiales