As soon as the locale module is activated, new nodes store their field-values in a different array location. By default the field API array is keyed with LANGUAGE_NONE, however as soon as the locale module is enabled the default language is used - as returned from field_valid_language(). It does that even if the content type is configured to have no multi-lingual support.
I think it should always write to the LANGUAGE_NONE key as long as no translation is really enabled, as
* it does not make much sense to me to store field values language specific if the entity is configured to have no multi-lingual support
* it is weird that enabling the "locale" module changes existing behaviour without any configuration changes. If the node is not translatable it should always use LANGUAGE_NONE for storing values regardless of whether the locale module is enabled.
This it is in particular weird for everyone that wants to programmatically write/update field values, as the target location changes dependent on the locale module *even* if the nodes are configured as to have
no multi-lingual support.