Programmatically save file into profile2 entity
If you are working with an unmanaged file, the following three-step process should do the trick:


Move the file (if necessary) to its final home defined by the file field on the entity.
Create a file object (see file_save_data() for some hints on how to do this) and then save it using file_save().  This will turn the file from unmanaged to managed.
Add the file reference to the file field.  You may also want to add an entry in the file usage table by calling file_usage_add().  Here is a code snippet for adding a file object to a file field on a node.

$node->file_field_name[LANGUAGE_NONE][0] = array(
  'fid' => $saved_file_object->fid,
  'display' => 1,
  'description' => '',
);


This assumes the file field accepts only one entry (index 0).