Después de jugar con las cosas, me di cuenta de cuál es el problema:field.types
debe ser una lista NOMBRADA vector, no simplemente una lista; además, los nombres de las filas no deben incluirse; de lo contrario, necesitamos tres tipos de campos. Para el ejemplo anterior, lo siguiente funciona bien:
dbWriteTable(con, name="table_name", value=df,
field.types = c(dte="date", val="double(20,10)"), row.names=FALSE)