The date values are still a work in progress. My apologies that this is far from obvious and you had to do quite a bit of reverse engineering here!
Basically, the date values are always stored exactly the way you input them (and that's how they will be sorted too). If the input can be parsed using the extended ISO 8601 / EDTF syntax then it will be displayed formatted based on the current locale. For example, "2019-02" would be displayed as "Feb 2019" in English; "2019-01-06T12:37:49" as "Jan 6, 2019, 12:37 PM", "2019-01~" as "ca. Jan 2019" and so on. If the input cannot be parsed correctly, it will be displayed as is.
As you've noticed, this only works if you enter the date in the metadata panel. If you create a value in the table it will always be created as a string. Once a value exists, it will keep its initial data type, therefore, if you first enter a date in the table, then later change it in the panel, it will stay a 'string' value, without any formatting applied. This is unfortunate and the reason for the confusing behaviour you've noticed. We'll definitely improve on this soon.
In the meantime, I can help you convert all your values to dates (if you prefer the formatted display) or to strings (and you could create a custom template which sets the date's type to string).