В результате экспериментов над простыми формами и ЭУ пришел к следующему выводу:
функции WaitForControlXXX работают следующим образом: они действительно останавливают текущий поток (тот самый, которому принадлежит алгоритм тестового метода), при этом возможны исходы:
1. условие выполнилось и мы досрочно прервали ожидание и пошли по алгоритму дальше.
2. Условие не выполнилось, но закончился интервал ожидания, который скорее всего равен WaitForReadyTimeout * ThinkTimeMultiplier (по факту у меня интервал немного превышал 1 мин, но о возможном превышении где-то пишется и в msdn).
При этом для 2), если условие не выполнилось, а интервал превышен - никаких остановок и исключений не будет - тихо и молча алгоритм побежит дальше, как и в случае 1.
Рабочей оказались такого рода конструкции:
while (!third.Exists)