Jason--
This is built into MCE-- there is an onchange_callback that gets called each time TinyMCE adds something to the undo buffer, so there is no need to deal w/ onkeypress, you just give MCE the name of the function you want executed. Your function could then set the CMS's isDirty function.
BTW, each MCE instance has an isDirty method that can be checked to boot:
tinyMCE.getInstanceById('yourid').isDirty();
<script language="javascript" type="text/javascript">
tinyMCE.init({
theme : "advanced",
mode : "exact",
plugins : "advimage,advlink,table,searchreplace",
theme_advanced_toolbar_location : "top",
<?php echo !empty($element_list) ? "elements : '$element_list'," : "" ?>
<?php echo !empty($tiny_css_path) ? "content_css : '$tiny_css_path'," : "" ?>
<?php echo !empty($tiny_css_selectors) ? "theme_advanced_styles : '$tiny_css_selectors'," : "" ?>
debug : false,
onchange_callback: "tvOnchangeCallBack"
});
function tvOnchangeCallBack(i){
i.oldTargetElement.onchange();
}
</script>
The tvOnchangeCallBack function did the trick.
Tested in IE. Please test in FF and the others
PS. TinyMCE works great in standalone mode but it slows down when used inside the CMS. With that aside it's a very cool html editor
ops: I obviously need to study up on the Javascript event model.
tinyMCE.init({
theme : "advanced",
plugins : "table,advhr,advimage,advlink",
theme_advanced_buttons1_add_before : "save,separator",
theme_advanced_buttons1_add : "fontselect,fontsizeselect",
theme_advanced_buttons2_add : "separator,insertdate,inserttime,preview,zoom,separator,forecolor,backcolor",
theme_advanced_buttons2_add_before: "cut,copy,paste,separator,search,replace,separator",
theme_advanced_buttons3_add_before : "tablecontrols,separator",
theme_advanced_buttons3_add : "emotions,iespell,flash,advhr,separator,print",
theme_advanced_toolbar_location : "top",
theme_advanced_toolbar_align : "left",
theme_advanced_path_location : "bottom",
plugin_insertdate_dateFormat : "%Y-%m-%d",
plugin_insertdate_timeFormat : "%H:%M:%S",
extended_valid_elements : "a[name|href|target|title|onclick],img[class|src|border=0|alt|title|hspace|vspace|width|height|align|onmouseover|onmouseout|name],hr[class|width|size|noshade],font[face|size|color|style],span[class|align|style]",
mode : "exact",
<?php echo !empty($element_list) ? "elements : '$element_list'" : "" ?>
});

Alright, almost there with FCK, but having some problems getting multiple instances to work correctly (e.g. for content and richtext TV's). Some instances work when on the same page, and others don't; plus it's inconsistent which ones do work, and which ones don't.
Jason:
Just in case you hadn't seen it yet, FCK Final Candidate was released yesterday. Might want to give it a shot; has a LOT of fixes. Also, the new templates feature and file manager are quite nice.