If I use the search function, as above, and instead of selecting all posts with one button press I just manually select the first 50 or so topics, then set the new subcategory in bulk, it works. The search results instantly update to show that new subcategory has been applied too.
The fault is to do with select all, it must, somehow behind the scenes, be getting confused with which posts form the complete list.
The same problem occurs if you select all then try to apply a tag. Posts which weren’t in the search results get tagged erroneously too and they appear to be the same ones that would get the wrong category applied.
To recreate try creating a new subcategory then searching for posts in the main category and bulk changing the category for all these using select all. See if just these posts move. You can move the posts back by viewing that subcategory outside the search environment, then selecting all and bulk applying the old category. This part of select all seems to work, it’s just the select all inside the search functionality that doesn’t do the right thing.