It is always a good idea to separate validation logic from UI. In this way, using IDataErrorInfo is correct.
Between view model and model, I prefer implementing IDataErrorInfo on view model since this interface is used by UI. You can simulate UI by calling indexers directly in your test code but if you really need validation logic in your business logic layer, such a call does not make much sense.
In our project, validation is an more independent component, which can be used by both presentation layer and business logic layer by configuration. From view model's perspective, it is very thin, containing only a call and constructing validation result inside indexer.
Also, another consideration is INotifyDataErrorInfo, which provided by .Net 4.5 and Silverlight. It provides more validation results from one property and asynchronous validation for a time consuming validation, which is what we want after we planned to update to .Net 4.5.
Hope it can help you.