Date, Datetime, and Time fields support custom display formats. You should be able to just change the format directly in your field under Parameters > Display. Next use [FIELD_NAME] when you want SQL formatted (0000-00-00 00:00:00) and use [cb:userfield field="FIELD_NAME" /] when you want it display formatted.
You are correct that Code fields have no storage at all. They simply take your PHP and display it as a field value. They can still be substituted in, but they cannot be queried for.
Is there a way I can accomplish the same goal but have a stored value in the DB that I can then map over to Moodle?
Is there a reason it needs to be stored in the database? You should be able to push data to Moodle using CB Auto Action using substitutions to get field values.