If you have a big, complex, standard inital condition, wiht lots of demo courses with lots of activities, you would not know which bits of that were actually relevant to each feature being tests.
Not at all - if I do the initial setup, I know exactly what it is.
We are talking here about the initial setup of a platform, I will call it "My Moodle". So in My Moodle, my users have courses in 10 top-level categories. Always - that's how their Moodle is set up from the very beginning and their categories are there, set in stone. My users know exactly what goes into each category - they are basically based on the core business model the organization has.
If those categories are not set up initially, then in each test I must add something like:
...And categoryX exists..."
It may make sense when you're writing tests for clean Moodle but for "my users" of "their Moodle" it is just a distraction.
"Any additional givens are distracting, which makes it hard for someone looking at the story for the first time – whether from the technical or business side – to understand what they need to know." - https://dannorth.net/whats-in-a-story .
The same thing can be applied to more things - roles, standard courses, permissions, etc.
The philosophy of BDD (behat included) is "writing software to achieve business outcomes" - https://dannorth.net/whats-in-a-story/ is a good read. Things like "Four-phase test pattern" mean nothing to the end users.
I honestly see a very strong case to support this kind of initial setup - so I can talk with end users about the tests for "their Moodle" and not tests like "take vanilla Moodle, then add all the things we set up for you". The communication & mutual understanding is the high priority for me.