Not necessary. Cloned entities do not occupy the cache, so the memory is released with ent_remove - and I can not see any problem with that. No trick required.
Just use ptr_remove, why wouldn't it be allowed? If you need to keep any parameters, save them temporarily. Example:
Change
ent_morph(ents[i], CUBE_MDL);
ent_clone(ents[i]);
to
vec_set(tmpV,ents[i].x);
ptr_remove(ents[i]);
ents[i]=ent_create(CUBE_MDL, tmpV, NULL);
ent_clone(ents[i]);