properly recurse when dealing with abstract variance (closes #3063)