This was a doozy but it turned out to be a simple fix. I don’t yet know the cause but have seen a few rumblings of the W3 Total Cache plugin being the culprit.
In a custom them, you call comment_form to add the default WP comment form. You can do all sorts of changes but customizing is pretty difficult. It will automatically call comment_id_fields which adds the hidden fields for the parent comment (comment_parent; for comment replies) and post id (comment_post_ID; for the comment to attach it to).
I believe W3T is the problem because comments worked just fine before using it and the problem I found was the comment_post_ID defaulted to one number and never changed. Something was wonky but the fix was super simple.
comment_form takes two arguments: $args and $post_id. Yep…easy enough…just pass the second argument and you’re good to go for any post you want to add a comment to.
<?php comment_form( $args, get_the_ID() ); ?>
Hopefully this helps someone else as Google was sparse on results for this specific problem.