Is having a different model/entity per layer the best practice here?
It's common, but no.
You can cleary save a lot of code if you map your datasets/readers directly to your Domain Models instead of having Entities.
And View Models are simpler if they are collections of Domain Models rather than completely new objects.
DTOs between a front end and an API can also be avoided by just using Domain Models.
Now, I think anyone can see the practical side of such an approach. But can it be backed up academically?
You would have to argue within a particular framework or practice. For instance I might say "repositories should return domain models" and then go into some theory from clean architecture. But it would be a complex argument to construct. I might have to convince you of a bunch of other stuff before we go onto DTOs
Secondly, do frameworks support this approach? Many will try to tightly couple to your objects with attributes or interfaces. If you want to avoid that you can be pushed into making DTOs.
I go with a practical argument on most things, if I can move the mapping code around and delete a few hundred DTOs that are basically the same as my Domain Models I do it and call it good practice because the code is simplified.
If I have some very OOP style Models with lots of methods, private data, calculated fields etc and I need to pass them over the wire, then I make DTOs