wp_trash_post action hook with custom post type

wp_trash_post is literal, not dynamic. It doesn’t change and always ends in _post regardless of actual post type. See wp_trash_post():

do_action( 'wp_trash_post', $post_id );

You also should retrieve post and check its type from $post_id, do not use globals in that fashion because they might refer to entirely different post.

Your second theory refers to entirely different hook in wp_transition_post_status():

do_action( "{$new_status}_{$post->post_type}", $post->ID, $post );

Note that it doesn’t start with wp_, however it does contain specific post type in it dymaically, so it will be trash_contact.