Having a Game class instance as top level object and owner of everything in the second level is obviously a good idea. Letting it hold "all data and functions in the game" is a not so good idea.
The description of your design is way too coarse to give sensible advice.
So if you want specific advice ask specific questions, present specific problems or explain more of your design.
Your question is like showing a silhouette of a car and ask us how to improve its engine and transmission.
CGame::run splitting into more loops? What loops exactly? What for?
Having multiple EventReceivers doesn't have to be a good idea. Usually I prefer to handle input hierarchically. Have one object get input and decide whether to handle it itself or whether to delegate it elsewhere. E.g. have an InputManager that handles all the global stuff itself and delegates everything else to the current game state input handler, which is maybe from a different class in case of being in the main menu or steering a character through a level. When you have multiple independent event receivers, you have to notify them all of this state change, since inside the game menu you only want to let the user choose among the options not accidently moving the character around when switching through the menu items with up/down, just as an example. Having a single central place that decides what to do or where to delegate is easiest to manage.
Nitpick: Prefixing class names with C is soooo 80-ish. You'd be surprised how much better to read class names are without this C and how much more sense an alphabetic index in Doxygen makes...
When you prefix interfaces with I there is no need for the C for classes anyway. What else are they other than classes/structs? You probably know the basic C++ types already, so C prefix doesn't add useful information anyway, it just makes the names awkward to read.