After restoring tables from a WP mu backup (an incomplete one as it turned out) various issues presented themselves, not least an inability to submit posts (HTTP 500 not informative).
A little searching revealed a likely cause (http://discuss.joyent.com/viewtopic.php?id=19116): missing auto_increment on wp_{n}_posts; not only was auto_increment missing, indexes and keys were too. Later I found a hiccup in tagging, again wp_{n}_terms and related tables had missing metadata.
Fixes
Removing erroneous entries added by admin-ajax.php
delete from wp_{n}_posts where ID = 0 and post_modified = 'YYYY-MM-DD hh:mm:ss';
Add primary index before restoring auto_increment
alter table wp_{n}_posts add primary key (ID);
alter table wp_{n}_posts change ID `ID` bigint(20) unsigned NOT NULL auto_increment;
Add remaining keys
alter table wp_{n}_posts add key post_name (post_name);
alter table wp_{n}_posts add key type_status_date (post_type, post_status, post_date, ID);
alter table wp_{n}_posts add key post_parent (post_parent);
Future backups
mysqldump --opt wordpress > wordpress.sql
Just using –add-drop-table insufficent in some cases.