jgeoff, can you try running this query:
SELECT count( DISTINCT TOPIC_ID )
FROM ubbt_POSTS
WHERE TOPIC_ID NOT
IN (
SELECT TOPIC_ID
FROM ubbt_TOPICS
)
This basicly gives a count of ghost-posts, ie, the topics are there in the posts table, but not in the topic table. You need mysql >=4.1 for it.
My board reports 29, so I'm thinking about writing a basic salvaging tool to get those topics back.