Explicitly implemented interface members aren't simply private. They're public - sort of.
They're public in that any code which can cast the reference to the interface can call them. (If the interface itself isn't public, then I guess you could say they effectively have the same access level as the interface.)
They don't have any specified access level because they have to be public in terms of the interface: there's no choice involved. They're not public members in the same way as normal public members of a type, but they're callable from any other assembly which can get hold of a reference and cast it to the interface type...
The C# 3.0 specification puts it this way:
Explicit interface member
implementations have different
accessibility characteristics than
other members. Because explicit
interface member implementations are
never accessible through their fully
qualified name in a method invocation
or a property access, they are in a
sense private. However, since they can
be accessed through an interface
instance, they are in a sense also
public.