Okay, I have had some time to explicitly make a test project and play around with this, and it seems the original problem is actually a bug. I'm pretty sure I also read something about that on the forums, but cannot find it with a quick search for now. However, there's an issue on GitHub that illustrates it, too (plus potentially some more issues, feel free to look more).
The core of the underlying issue:
Having a class compiled with default actor isolation set to MainActor is NOT the same as having it compiled with default actor isolation set to nonisolated and annotating the class explicitly with @MainActor. This apparently occurs only in Swift language more 6, not 5.
So to sum up:
Language mode: Swift 6 & default actor isolation = MainActor:
Main actor-isolated initializer 'init()...
but
Language mode: Swift 6 & default actor isolation = nonisolated & class annotated with MainActor:
compiles
Unfortunately manually annotating a class with @MainActor does not "overwrite" the default isolation to MainActor, meaning if the target is configured with this default isolation AND you annotate manually with @MainActor, you still see the error message.
If I understand it correctly, Swift should be able to somehow handle to have a subclass's synthesized initializer with a different isolation than the superclass's initializer. This makes sense to me as long as the superclass doesn't have a specific isolation defined, as making it "stricter" should always be possible.
In the case of XCTestCase and its subclasses (i.e. any test case you implement) that's perfectly reasonable and has worked in the past. I have often manually annotated my test case classes with @MainActor entirely if they were testing main actor bound types (e.g. view controllers).
Furthermore, I assume this issue also applies to overrides of other methods, like setUpWithError and so on.
So my advice for now would be to not have default actor isolation set to MainActor for test targets and instead annotate the entire test class with @MainActor manually, if needed. This is probably a lot less refactoring than using "default actor isolation = MainActor" and then opting out of it by marking the test classes as nonisolated overall and then individually mark test functions as @MainActor.
If you go the other way around (like I originally suggested), you have to make sure that inside your test case subclasses, isolation is handled properly. Meaning: If any test state is instantiated off the main actor (in a set up method), but your test functions are bound to the main actor, you may encounter sendability problems.
By the way, my hunch is that while XCTestCase is not annotated as such, the test system probably does use it on the main actor/main thread for the most part... this would mean the sendability issues are all kind of a mirage, but obviously I don't know that. 