Normally you can't do this with a whereHas and you would need to use a join. However, I think you can use a orWhereHas here instead
$users = User::with('photos')
->where(['role_id' => $roleId, 'status' => User::STATUS_APPROVED])
->whereHas('profile')
->orWhereHas('profile', function ($query) {
$query->where('interested_in', '=', $roleId);
})->paginate(6);
Looking at your query your orWhere is a bit weird. Because you can already do this with one whereHas right? Also if you first do a whereHas('profile') and then the orWhere it doesn't make sense at all.
What exactly are you trying to achieve here? When do you want the user to show up. When both where and whereHas match?