Добрый день!
Если ещё актуально, либо для тех кто будет искать решение вопроса в будущем, как я. В Moodle (моя версия 3.3) завершение курса по завершению элемента(ов) происходит после запуска cron.php, а не сразу.
Причём есть странная особенность работы, с которой я пока не разбирался: cron надо запускать дважды. Сначала у пользователя в таблице БД `course_completions` проставляется значение в столбце `reaggregate`, потом оно переезжает в столбец `timecompleted`. Тогда у пользователя, завершившего требуемые элементы, и проставляется отметка о завершении курса.