The managed file element handles moving the uploaded file for you, so there's no need to call file_save_upload()
manually.
You're getting a NULL
return because of these lines in file_save_upload()
:
// Make sure there's an upload to process.
if (empty($_FILES['files']['name'][$source])) {
return NULL;
}
As the file's already been processed there's nothing for the function to do.
You can persist the file entry by adding a submit handler to the form and using code similar to
$file = file_load($form_state['values']['company_logo']);
$file->status = FILE_STATUS_PERMANENT;
file_save($file);