So the code's been going back toward just writing the routines for dumping results into objects in application code, and we're finding that this does seem to be more maintainable. And it's definitely proving easier to reason about bits and cycles without this big (trying-to-be) black box right smack dab in the middle of everything. Not to mention that having to think in 3 languages is more than 50% harder than having to think in two.
ETA: I'm beginning to think that last bit defines the difference between ORM success and ORM frustration. If your needs are such that can largely avoid the SQL, then you can largely stick to just reasoning in the application's programming language and the ORM's data mapping language. One anecdote that I think supports this possibility is that ORM proponents see the ability to easily flip among different RDBMSes as a big bonus. Whereas folks who aren't fans tend to see it as a sign that the DBMS isn't being used to its full potential, since advanced SQL features (and basic rules of thumb for designing performant schemas) are almost always very DBMS-specific.
At some point when an app gets complex programmers tend to keep SQL organized so it's not all throughout the code, just like keeping view logic separate. To me that is just a simple ORM as well.
There seems to be an anti-ORM trend but I suspect it's more of an opposition to certain established ORMs that are really complicated to work with.
If that's not true, I'm also curious to hear about other strategies that people are using these days. Having no strategy at all seems a little sloppy to me, but I'm always open to new ideas.
If there were a way to scale an ORM so it can modularly add features/complexity as you need it (ie, customize the metamodel complexity), that would be the most ideal approach.
On the other hand, testing thousands to millions of possible use cases in combined codebases is a nightmare.
One thing is for sure, no matter what ORM or similar solution you use, if you don't know how to observe and understand the SQL that is generated then you won't be able to use it efficiently.