When you're using a component based model, you have two real options when it comes to the individual components.
Keep track of all components in one massive "Components" list (or array, or dictionary, etc.), calling OnUpdate() on each one sequentially, in turn.
Group the components by type or usage, and call the groups you need, in turn.
I'm oversimplifying, clearly, but I hope it's obvious that the latter is much more useful than the former.
Either way, you need to both keep track of all of the components, and update each of the components. It sounds like you're already using a "Subsystem" kind of class that handles your individual render components. Great! You're well on your way to the second bullet point. As long as your Render Subsystem knows how to access the render components you need, you can start the spritebatch, update your components en masse, and then end it.
I wrote a component-based render system myself, and this was all the code within my Draw() call (in my case, my GraphicsSubsystem extended XNA's DrawableGameComponent class, which means it has both an "Update" and a "Draw" method):
public override void Draw(GameTime gametime)
foreach (var pair in graphicsDict)
//only draw them if they're set to visible
Where GraphicsDict is a GUID,RenderComponent Dictionary that holds all of the components, and I pass in sprites, the SpriteBatch as a parameter. This way you can do all of your rendering that requires certain batch settings at once, and you don't have to worry about switching between settings between the drawing of the individual components.