Ok, after a bit more experimenting with smaller lists, it seems the problem only arises when one of the films in the XML list is unrated.
For rated films, the XML element is e.g <Rated>excellent</Rated>
But for unrated films, instead it is <Watched>false</Watched>
with a bit more experimenting, if I take a list with one <Watched></Watched> element and all the rest <Rated></Rated>, the whole file imports incorrectly - but if I edit the XML so that one tag becomes <Rated></Rated> instead - it works fine.
And it also works if I replace 'Rated' with 'Watched' for all the other items. So it looks like the problem is because the elements are different between items.
If that's the intended behaviour of course, then I can work around it

(edit to add a small addendum - if I do a find and replace in the XML of the full list of movies to replace Rated> with Watched> - everything works perfectly.)
Thanks,