Почему у практически идентичных условий разная скорость проверки?
Могу предположить, что интерпретатор питона не пересчитывает во внутреннем цикле значение target - nums[i], поскольку оно во внутреннем цикле не меняется.
А значение nums[i] + nums[j] надо пересчитывать каждый раз.
Так логично, чем меньше значение тем быстрее его можно проитерировать и сравнить, это не только в питоне а в целом во всех языках должно быстрее работать.