If I delete the bad image, and upload the same image, and edit the newly uploaded image, it doesn't preview the image, it just shows a broken image placeholder. This is on /wp-admin/post.php?post=23&action=edit

broken image placeholder is usually when the image is not properly uploaded. It save the details to database which is why you can see that the file exists in the file system, but does not get uploaded.