Well it is usually a matter of preference. But I'm personnaly a fan of using Custom Business Entities instead of datasets for the following reasons:
1. Dataset is a fairly complete and powerfull class, but this is also a disadvantage because in most situations you just want to retrieve some information from the database, bind them to your page, and then just throw the dataset it away. It's just like sending a postcard using a jambojet.
2. Dataset is designed for disconnected scenarios, in which you want to work with data while you are disconnected from the database, but specifically in web applications the execution time is very short and these functionalities will not be used.
3. By using Custom Business Entities you will have more control on the functionality that your classes will expose.
4. You can use generics to send collections of entities to the business layer, which makes a cleaner and typed code.
5. Custom Business Entities are not necessarily Smart Objects, they are just a way of passing information between layers, so they do not eliminate the need for a Data Access Class.