Ваше решение с checksum всё-равно неправильное для многопоточной системы.
Если вам нужно гарантировать отсутствие изменений в рамках одного процесса, сам нужно использовать транзакцию и shared lock для тех строк, которые не должны поменяться и lock for update для тех строк, которые должны поменяться. В этом случае никакие другие процессы не смогут ничего изменить никакие строки до окончания вашей транзакции, а значит и целостность данных будет обеспечена.
Если вам нужно гарантировать отсутствие изменений при нескольких процессах (например, что значения до отправки формы и после отправки формы обратно на сервер совпадали), нужно вычислять контрольные значения только по тем строкам, которые вы затрагиваете, а не по всем таблицам. Иначе может возникнуть следующая ситуация. Вы вычислили контрольную сумму таблицы. В это время какой-то преподаватель начал редактировать свой курс, переименовал название раздела. При этом это может произойти в курсе, который не имеет к вашему плагину никакого отношения. В результате у вас контрольная сумма не сойдется. А mysql не умеет вычислять контрольную сумму по отдельным строкам (как функция в mssql, про которую писал Виталий).
Если вы думаете, что можно создать в moodle систему, в которой контент будет управляться только автоматически, и всегда будет полностью соответствовать неким внешним данным, то это утопия. Опыт показывает, что со временем всегда появятся дополнительные курсы для служебного назначения, какие-то курсы, где что-то будет правиться вручную, а из-за этого подход с контрольными суммами по всей таблице будет не жизненным.
Как вариант, в вашем плагине подписаться на события изменения курсов/категорий/секций, и при их возникновении сверять только отдельные элементы структуры.
Пока из вашего описания не понял, к какому из перечисленных вариантов ближе ваша ситуация.