This is caused by the CSS theme definition. Some of the themes (white, green) use a gradient background which is defined using "background" property.
The e.BackgroundColor set in BeforeEventRender is applied on the _event_inner element as an inline background-color style. If you define background in the stylesheet this inline style will not be able to override the background color.
There are two possible solutions:
1. Create a custom class for each color you want to use and apply the class using e.CssClass instead of e.BackgroundColor.
2. Change the CSS theme so that it use background-color instead of background for _event_inner element. This way you won't be able to display the gradient though.