Hi Konstantin,
In your custom control in the .ascx file, make sure you have AutoEventWireup="false" if you are wiring up the event yourself and this is true then the event is wired twice so it fires twice.
My recollection is that I needed the EnsureControls because in Module Settings we are loading this control dynamically (ie it is not a control declared in the page). So in this case with a dynamically loaded control it must be re-created again on postback and this method prevented a possible null reference exception if the event sequence was different than the page event sequence due to the timing of when the control s created on postback.
Hope it helps,
Joe