With the introduction of virtualization of RadGridView many things have changed. Containers (rows and cells) are recycled and reused. That is why you should not be using the RowLoaded event anymore. This is because one cell can host many different data instances during its lifetime. The correct way to do this is define a CellStyle for the column of your choice and through this CellStyle change the cell template. Then you modify the DataTemplate in a way to suite your needs.
To demonstrate this I have prepared a very simple project that paints cells according to some property of the business object. I guess that in your case you will need to create an IValueConverter which will return the images based on the business object property. Then you will bind your custom control to the business object property by using this converter. In my sample project the the converter takes a football player Position and based on it returns a Brush to paint the background of the cell. You can see this in the cell template. I guess that yours should so something similar.
The bottom-line is that you should do everything through the cell template and not on RowLoaded.
Please, examine my sample project (which is over-simplified of course) and let me know if you have any questions or troubles in implementing this approach.
All the best,
the Telerik team