Using meta_query and custom fields within pre_get_posts to return posts within a numerical range

The type argument in your meta query is wrong. It spells NUMERICAL but the correct value is NUMERIC.

$meta_query = array(
    array(
        'key'       => 'bpm',
        'value'     => array($bpm_start, $bpm_finish),
        'type'      => 'NUMERIC',
        'compare'   => 'BETWEEN'
    )
);