Found my own solution. The key was to use a different callback and reference woocommerces actual field name. Have simplified the code below down to the essence.
function mmd_list_claimlisting($DBRecordId)
{
global $woocommerce;
$Record = mmd_list_GetDBRecord($DBRecordId);
$woocommerce->session->set('claim_state', $Record['BusinessState']);
$woocommerce->session->set('claim_country', $Record['BusinessCountry']);
// No matching variation found
}
////////////////////////////////////////////////////////////////////
// Pre-fill out the check out fields with the listing data
///////////////////////////////////////////////////////////////////
function FillInCheckOutFields($fields)
{
global $woocommerce;
switch($input)
{
case 'physical-state':
$claim_state = $woocommerce->session->get('claim_state');
if(!is_null($claim_state))
return $claim_state;
break;
case 'physical-state':
$claim_country= $woocommerce->session->get('claim_country');
if(!is_null($claim_country))
return $claim_country;
break;
}
return $fields;
}
add_filter( 'woocommerce_checkout_get_value', 'populating_checkout_fields', 10, 2 );