Figured this out. You need a second variable for the profile2_load_by_user($obj_user) function. What you currently get back is an array of profiles, e.g
'candidate' => Profile object, 'person' => Profile object, 'student' => Profile object
You need to specify the profile in the call and then you just get a profile object back. Then you can save the profile as it is an Profile object.
e.g. profile2_load_by_user($obj_user,'candidate');
Hope this helps