I've checked out the raw data and it seems to be because there are so many topic/post status types - for example: hidden, unapproved, deleted - and the meanings of these have changed over the last few product versions.
It appears that XF is showing "hidden" posts as soft deleted (correct) but that "deleted" posts are being imported as visible - this is where approved=2 in the topics table. In IPB, delete posts are automatically removed after a certain time, but where they are in this limbo they should really be marked as deleted. Similar situations apply to forum posts marked as deleted.
I can manually run some queries to update these idiosyncrasies before importing, but it would be useful to have the importer cater for it.
I'm so glad I'm moving these boards over to XF, the deleted/unapproved/hidden structure is so unnecessarily complex and illogical!