I have a similar problem, only the HTML bits that kept disappearing are from my Pages.
So after seeing this, armed with the piece of code from panther8's link, I did a bit of searching and found this page about Page Detection for Post Types in the Admin Menu and I managed to cobbled together something that works for me.
function post_type_script($pagehook) {
global $post_type;
$pages = array( 'post.php', 'post-new.php' );
if ( in_array( $pagehook, $pages ) && $post_type == 'page' ) {
add_filter( 'wp_default_editor', create_function('', 'return "html";') );
}
}
add_action('admin_enqueue_scripts', 'post_type_script', '', array(&$this) );
I'm not sure how you can edit it to help with your issue, but I believe it can be used for getting the post.php to do certain things only for posts of certain criteria.
I do know that post.php has the post ID for the post to be edited. A vague idea in my head is to store a list(array?) of the post ID of the posts which shouldn't be edited somewhere(options?) and check with the list when loading post.php.
Maybe somebody else can work it out. :3 I'm not confident of my code-cobbling skills for something this bit more complicated. I think it can work as a simple plugin, to be honest.