Good point, I ammended my examples to add the public, but my actual implementation already did that. In my second (working) example, making Data in the Derived class private does actually result in an error about accessing the private struct. The second example was working with public though, so making it private makes sense that I would get the error.
I found an interesting question about this here: http://stackoverflow.com/questions/17478621/when-instantiating-a-template-should-members-of-its-incomplete-argument-types-b
The part about dependencies in the template would make sense, especially "In resolving dependent names, names from the following sources are considered: Declarations that are visible at the point of definition of the template." Since the Data struct isn't visible when I inherit from the mixin template, it can't resolve the dependent type. That wouldn't explain why my second method works though, as that should still be subject to the same restrictions on resolving the dependency?