OK, found the problem. Custom Profile fields isn't completely installed... There are no SQL errors, because there are no SQL instructions
You need to do this:
#
#-----[ OPEN ]--------------------
#
includes/usercp_register.php
#
#-----[ FIND (around line 1125)]----------------------
#
if( !($result = $db->sql_query($sql, END_TRANSACTION)) )
{
message_die(GENERAL_ERROR, 'Could not insert data into user_group table', '', __LINE__, __FILE__, $sql);
}
#
#-----[ AFTER, ADD ]--------------------
#
//
// Custom Profile Fields MOD
//
$profile_data = get_fields('WHERE users_can_view = '.ALLOW_VIEW);
$profile_names = array();
$semaphore = 0;
$sql2 = "UPDATE " . USERS_TABLE . "
SET ";
foreach($profile_data as $fields)
{
$name = text_to_column($fields['field_name']);
$type = $fields['field_type'];
$required = $fields['is_required'] == REQUIRED ? true : false;
if(isset($HTTP_POST_VARS[$name]))
{
$temp = (isset($HTTP_POST_VARS[$name])) ? $HTTP_POST_VARS[$name] : array();
if($type == CHECKBOX)
{
$temp2 = '';
foreach($temp as $temp3)
$temp2 .= htmlspecialchars($temp3) . ',';
$temp2 = substr($temp2,0,strlen($temp2)-1);
$temp = $temp2;
}
else
$temp = htmlspecialchars($temp);
$profile_names[$name] = $temp;
$sql2 .= $name . " = '".str_replace("'","''",$profile_names[$name])."', ";
}
$semaphore++;
}
$sql2 = substr($sql2,0,strlen($sql2)-2)."
WHERE user_id = ".$user_id;
if(!$db->sql_query($sql2) && ($semaphore))
message_die(GENERAL_ERROR,'Could not update custom profile fields','',__LINE__,__FILE__,$sql2);
//
// END Custom Profile Fields MOD
//
With this added, any new registrations will see the profile field being saved to SQL. It is clear to see why this mod didn't work properly - the above code belongs within an else statement that begins around line 1027. And low and behold this else is the "else" to: if ( $mode == 'editprofile' ) around line 854 - in otherwords, when somebody wants to register, there was no code there to save the fields to the database!