Как правильно очистить память?
в теории dispose должно быть достаточно, но это не гарантирует того, что не останется мусора, можно загрузить этот код бесконечный цикл и посмотреть на потребление памяти, если за пару минут память не утечет, то все нормально.
Ну т.к. у вас функция возвращает указатеть, IntPtr хранит указатель и никак не умеет чистить ресурсы. Значит у вас должна импортироваться еще и функция для очистки ресурса, которую и следует использовать. А в таком виде явная утечка, т.к. imgHandle ресурс неуправляемый и соответственно сборщиком мусора не очистится.