Dopo aver trascorso la giornata su questo, la risposta è la seguente:
Wordpress esegue l'escape alla dichiarazione $_POST, non all'inserto effettivo, il che è bizzarro.
$id = stripslashes_deep($_POST['id']); //added stripslashes_deep which removes WP escaping.
$title = stripslashes_deep($_POST['title']);
$message = stripslashes_deep($_POST['message']);
$wpdb->update('table_name', array('id'=>$id, 'title'=>$title, 'message'=>$message), array('id'=>$id));
In questo modo WP non aggiungerà barre prima delle virgolette.