Passing DrawMgr refs around to each object to be drawn isn't one of the things at the top of my list to change. The actual guts of how DrawMgr draws is a whole other story though, that could use a lot of work. Right now every draw request ends up as a full blown OpenGL draw call, which is not good. Neither is my system of carving up every sprite frame and tile into its own separate texture ID, that stuff should be atlased together as much as possible. I could go on... Anyway, DrawMgr itself remains decoupled from having to know anything about game objects, it just fulfills requests to draw things no matter what is making that request.
In my engine, when it's time to draw, I think we just crawl the scene graph and pass the drawmgr ref to everything that wants or needs to draw, I don't feel like that's cumbersome. Its all done in one place in one phase, I'm not constantly hunting for access to or caching in weird places the original DrawMgr ref. Maybe it's something else about your engine's structure that's actually the problem that's causing you to have doubts about this? That being said, the two methods you suggest could probably work, nothing about them is setting off huge red flags for me. Heck, if you look at my DrawMgr code, it's really sparse, all it knows how to do is draw quads, and do some simple blending and rotation of said quads. Your method of asking it to draw Items based on Item refs would mean it gets coupled to whatvever Items are. I guess its also a matter of how important making this transferable is to you. Definitely don't rewrite half your engine unless you absolutely have to, that's how projects never get finished.