The general rule for the default access modifier is going to be the least accessibility possible. MSDN goes into more detail:
Classes and structs that are declared directly within a namespace (in
other words, that are not nested within other classes or structs) can
be either public or internal. Internal is the default if no access
modifier is specified. Struct members, including nested classes and
structs, can be declared as public, internal, or private. Class
members, including nested classes and structs, can be public,
protected internal, protected, internal, or private. The access level
for class members and struct members, including nested classes and
structs, is private by default.
...
The type of any member that is a field, property, or event must be
at least as accessible as the member itself.
So in C# these are the rules, however I agree with comments that the particular issue you are dealing with is ultimately due to internal having no meaning in IL.