Inspired by James, I worked out how to do the redirects for old WordPress posts.
Firstly, I wrote a page template that would get the permalink for each post then automatically generate the new permalink for the archive page based on the date and number of posts on that day.
Next, I created a new custom table and (using the above template) automatically wrote all the old & new permalinks to it.
Finally, I added a custom 404 page that checks if the URL matches an entry in that custom table and, if so, redirects to the correct post using the archive page.
This is a WordPress link but, now that I have removed the root WP files, should be captured by the 404 page and redirected to the correct post on the archive page.
I need to do some more work on things, especially for instances where a 404 is generated by something that isn't an old WordPress link. I may also duplicate the permalink pairs for those instances where a post link was hard-coded prior to moving WordPress to a subfolder.