Hi Si,
When raising events in C#, you are required to ensure that the event is not null before raising it. The basic pattern* is this:
if(ModuleCommunication != null)
ModuleCommunication(this, args);
The only way you could be generating that error on that line would be if ModuleCommunication were null, so this would appear to be the source of your problem.
Once that is corrected, you will need to figure out why your receiver is not subscribing to the communication event when you are not logged in as an administrator. Probably the most common cause of this would be the receiving module not being displayed on the page due to permissions. Are you able to see both modules -- on the same page -- when not logged in as admin?
Hope this gets you started!
Brandon
* There is actually an interesting race condition in this pattern such that you risk failure under some multithreading situations. This is an ongoing weakness in C# and the solutions (even the local variable version) are neither elegant nor satisfactory. Google for more information; the above pattern is fine for most situations.