7 – How to render full profile2?

Looks like you can get a renderable array using profile2_view():

/**
 * View a profile.
 *
 * @see Profile::view()
 */
function profile2_view($profile, $view_mode = 'full', $langcode = NULL, $page = NULL) {
  return $profile->view($view_mode, $langcode, $page);
}

https://git.drupalcode.org/project/profile2/-/blob/7.x-1.x/profile2.module#L1084

See also that modules hook_user_view() which does the same:

https://git.drupalcode.org/project/profile2/-/blob/7.x-1.x/profile2.module#L399

/**
 * Implements hook_user_view().
 */
function profile2_user_view($account, $view_mode, $langcode) {
  foreach (profile2_get_types() as $type => $profile_type) {
    if ($profile_type->userView && $profile = profile2_load_by_user($account, $type)) {
      if (profile2_access('view', $profile)) {
        $account->content('profile_' . $type) = array(
          '#type' => 'user_profile_category',
          '#title' => $profile_type->getTranslation('label'),
          '#prefix' => '<a id="profile-' . $profile->type . '"></a>',
        );
        $account->content('profile_' . $type)('view') = $profile->view($view_mode);
      }
    }
  }
}

With a single entity in your code, you can:

render($profile2_p->view($some_view_mode));