WordPress Custom Fields Won’t Save

It seems you have one error in your code…

if($id == $author_id){
    $selected = ' selected="selected"';
}

It should be $building_id instead of $author_id.
I tested the rest of the code and the saving is working fine.

If you had printed/echoed out the value of this line …

$building_id = get_post_meta($post->ID, 'p2p2_building', true);

like print_r($building_id);, you would had seen, that the correct post-ID was already saved. So only your select-element was not able to set the “selected” attribute correctly.

P.S. Maybe you also want to add an empty default option to the select field.
As sometimes a user wont fill out this field, and than the first options post-ID gets always saved.

Something like…

echo "<select id='p2p2_building' name="p2p2_building">";
// empty default option:
echo "<option value="">Select building...</option>";