Как минимум сделать правильно - убрать выпрыгивание по GOTO из цикла. Тем более, что оно здесь не нужно совсем.
Для этого удалить строки 18, 6, 1
А по поводу CTRL его нажатие проверяется только в месте выполнения ISKEYDOWN. Соответственно, если картинка найдена, то там пауз минимум на
300+300+50+50+50+10+поиск с % ≈ 1 сек.
9 и 7 строка тоже не нужны тут было пара товарищей любителей пихать после всех условий задержки, а люди потом за ними повторяют. Это вредные паразитные задержки непонятно с какой целью вставленные.
Если хочешь прям чёткого срабатывания после единичного короткого нажатия в любой момент, то нужно следить за клавишей в потоке.
THREAD(break_key_th, 0)
    IF(ISKEYDOWN(#CTRL) = 1)
        $break_key = 1
        WHILE(ISKEYDOWN(#CTRL) = 1)
            WAITMS(50)
        END_CYC
        SETTHREAD(break_key_th, 2)
    ELSE
        WAITMS(50)
    END_IF
END_THREAD
SETTHREAD(break_key_th, 1)
$break_key = 0
WHILE($break_key= 0)
    GETSCREEN(838,578,1706,1023)
    IF_PICTURE_IN(838,578,1706,1023, "телмоб.bmp", -1, 80)
        $WNDF = WNDFIND("Связь с телефоном")
        WNDPOS($WNDF, 135, 190)
        WAITMS(10)
        WNDSIZE($WNDF, 1408, 844)
        WAITMS(50)
        LCLICK($_return1+12, $_return2+12)
        WAITMS(300)
        LCLICK(1425, 201)  // Закрыть телефон
        WAITMS(300)
    ELSE
        WAITMS(50)
    END_IF    
END_CYC
// Продолжение скрипта
после нажатия выход произойдёт не сразу, долбить не нужно. Просто выйдет из цикла когда закончит всеклики с паузами написанные в цикле - если картинка в тот момент найдена.