I thought I'd post an update on what the problem actually was in case it is useful to anyone else.
Regarding the initial problem re:
Could not find stored procedure 'sp_MSins_<table_name>'
The distribution.dbo.MSrepl_commands table actually had two records for this command in the same transaction for the same insert. There was a slight difference in these however.
The first was normal in that the command began with:
The type of this command was 30.
The second, however, began with:
The type of this command was -2147483618.
The problem was in trying to execute the 2nd version of the sp_MSins_<table_name>, i.e. the one that had the ;2 appended to it.
When I checked the distribution.dbo.MSrepl_commands table it contained a mix of the following types:
As can be seen the bulk of the commands that had been waiting to be replicated over the period that replication was down were of type 30.
When I checked all of the commands of type -2147483618 and -2147483610 they were all attempting to execute 2nd versions of replication procedures (i.e. with the ;2 appended to them). Also, these all belonged to a 1 or 2 hour period around the time when I believe the attempted re-initialise took place.
When I checked the previous commands that had been failing with the "sync" and "SYNCSTAT" commands, theie type's were all in the region of -2147483646 to -2147483578.
I searched the internet and couldn't find any explanation of what the different types referred to, but I think it is reasonable to assume that type 30 relates to normal transactional replication, while the -2147483618 (and others in that region) types are related to an attempted reinitialisation.
I deleted the commands of type -2147483618 and -2147483610 from the distribution.dbo.MSrepl_commands table and restarted replication and it started successfully. Another few minor errors occurred due to PK violations, but I dealt with those and continued to restart synchronization. After that I left it running and it caught up later the same night.