Saving date field programmatically on node, but not on profile
This might or might not fix your problem but since you're using entity metadata wrappers, you should use them fully:

$profile = profile2_create(...);
$profile_wrapper = entity_metadata_wrapper('profile2', $profile);
$profile_wrapper-&gt;field_date = array(...);
$profile_wrapper-&gt;save();


The above snippet can also be used with nodes, just replacing the creation &amp; wrapper instantiation.

Also, if you're using a single timezone, you can safely omit it and just specify the actual timestamp value.  You should probably omit the 'date_type' key too, that's inferred by the field config and could be causing issues.

In fact, you should just do: $profile_wrapper-&gt;field_date = 123456; // (timestamp)

Tested locally and it works!

You shouldn't use LANGUAGE_NONE or [0] indices because not only might it break i18n if you're translating fields but it's also not very robust.