I solved it! I actually found that this issue was already encountered here (albeit with a different error message, hence I did not initially find it):
Basically MouseCursor.FromTexture2D(), creates a new MouseCursor instance, each of which has an internal Texture2D instance. So when I was calling this function I was basically creating new Texture2Ds, and the previous ones were never de-referenced and thus disposed, hence the memory leak. The solution was to keep track of the last custom MouseCursor, and call dispose on it before I created a new one:
public static MouseCursor customCursor; // a static instance of past custom Mouse cursors, so they can be disposed of if there is a new one so there are no memory leaks
…
if (customCursor != null) customCursor.Dispose();
customCursor = MouseCursor.FromTexture2D(MouseCursorTarget, 0, 0);
Mouse.SetCursor(customCursor);