post_type_exists keeps returning false

You must call register_post_type on each page load, when you register a post type it doesn’t modify the database it updates variables which only exist for that page load. If you don’t do this WordPress is unaware of that post type. Much the same way that you register settings pages and styles on every page load, WordPress doesn’t remember that you enqueued a stylesheet 5 pages ago, it needs to be told to load it.

It’s the same with post types and custom taxonomies. Even the default types of pages posts categories and tags are registered on each load.

As a side note, you should not flush rewrite rules on every page load, it’s an expensive operation and only needs to be done when things change, as rewrite rules are stored in the database.