Oi,
apagar o cache que fica no "moodledata" não é também o melhor jeito, o melhor seria através das funções cache_helper::purge_all(true); e purge_all_caches(), pois é possível que o cache esteja armazenado em outro lugar que nao o moodledata, por exemplo um memcache(d).
Sobre a criação de categorias, você pode ver na lista de webservices que existem funções para criar, atualizar, remover cateorias e obter categorias. Uma vantagem de usar essas funçõe é a criação automática dos contextos e também do "path". Veja a lista de webservices em https://docs.moodle.org/dev/Web_services_Roadmap
As funções de webservice para criação de cursos e categorias estão definidas no arquivo course/externallib.php
Você pode dar uma olhada na implementação destas funções caso queira implementar seu sistema usando a API em PHP do Moodle ao invés destes webservices.
Grande abraço,
Daniel