Try it like this:
var doc = new XmlDocument();
doc.Load(FileName);
XmlWriterSettings settings = new XmlWriterSettings { Encoding = Encoding.UTF8, Indent = true };
using (var writer = XmlWriter.Create(destinationFile, settings))
{
doc.Save(writer);
}
doc = null;
If you don't set doc to null, the GC may see it still as an active reference and not free the memory. The GC has its own logic for garbage collection and forcing a full garbage collection is not the best practice (Best Practice for Forcing Garbage Collection in C#).
Also I don't believe that you have a memory leak; it appears that the GC hasn't been triggered to free the memory. By what do you mean when you say the memory keeps on increasing? What level does it reach when you feel you need to bring it back down?
EDIT
See this link for options on reading XML files: Deciding on when to use XmlDocument vs XmlReader
When working with very large XML files, it possible to get XMLDocuments allocated on the large object heap(LOH) which can cause fragmentation in the LOH and lead to OutOfMemory Exceptions.
XMLReader
may be a better fit for you here then.