An enhancement that would help this:
For each type of deep loaded object, the DeepLoad method could be passed a delegate that would retrieve the relevant deep loaded entites. Then netTiers could load the ...Source properties by matching to the primary keys, all in .NET code.
For this example, DeepLoad would take a delegate that returns all status values that could possibly match to this list of projects. In this case, it could be any of them. The call might look like this:
DataRepository.ProjectProvider.DeepLoad(projects, false, DeepLoadType.IncludeChildren, typeof(Status), delegate(TList<Project> projects){ return DataRepository.StatusProvider.GetAll(); });
This way, any kind of crazy deep load can be optimized if necessary, using a standard syntax.