Well, you're allowed to put items into functions, and there's no real reason why modules should be specifically excluded. Also, "non inline" modules are just syntax sugar for "inline" modules; the compiler doesn't distinguish between the two AFAIK. It does the same thing as if you'd copy+pasted the contents of m.rs twice.
Oh, that's fun too, but it one isn't quite so strange IMO: having the attribute is explicitly opting-in to importing the same file twice. (Maybe there could be a lint against it? Although, I imagine most cases where one does it accidentally will result in a compilation error earlier.)
At least you'll get a warning about snake case names for Foo. But yes, case-insensitivity is ugly. If your file was called Foo.rs and you wrote mod foo; then it would only work on Windows.