I can't exactly tell what your question is, but regarding:
... couldn't see any way to choose different branches of a remote subtree (such as the Core Libraries) for different branches of the parent project.
Are you suggesting that you want to link a branch of the parent project to branches on the subtrees? If all of the sub-projects tend to be submitted in sync with the super-project, I think there's something like git slave that's a better fit for that.
Subtrees are more ideal if you tend to work on the super project primarily and occasionally contribute changes to the sub-project which you can decide when to push back to the sub-projects tracking repository.
Think of it kind of like middleware.
You get a drop from the vendor, and make sure your code works with any of the api changes made. From that point on it's all just part of your super-project repository. Make changes happily. If you do something awesome and want to contribute this back to the sub-project, split it out into a branch, and then merge it into a branch of the sub-project and make a pull request from there.
Periodically as you're developing you can also pull down changes from the "vendor" to update your sub-projects.
So, I'm not sure this is how you imagined the workflow, but you can indeed push subtree changes to the subproject via a branch.
I'd refer to https://github.com/git/git/blob/master/contrib/subtree/git-subtree.txt for the split syntax, and example. See: "EXAMPLE 3. Extract a subtree using branch"
Here's how I'm imagining your workflow:
Multiple super-projects pull in the sub-projects into folders using subtree. They don't auto-magically get changes as the sub-projects change, which is good because you want to control when you pull so that you can ensure everything still works.
Standard workflow would be you clone master, work on a branch, and commit changes back to the super-project (which may in fact include changes to the sub-projects, but the super-project can still be gated by merge request workflow like normal).
Perhaps some of the changes that have been made to the sub projects are not complete or they just fit with the current state of the super-project, but aren't ready for wide-spread distribution to the other super-projects. In this case you can either simply not split the changes out until their ready (at least you have tracking of it in your super-project), OR you can split the changes out to a branch. Create a branch of the main sub-project and push to that. If you have tight merge requirements for this sub-project that's how you'd propose pull requests, but don't confuse that with having to now pull from that branch of the sub-project to your working super-project. The only reason you'd ever want to do that is if you have 2 super-projects that want to share the sub-project work before you have officially committed them to the master.