This appears to be an issue with the Redirect Module itself but I fixed it by cloning the module repo and modifying the OnItemMoved method in AutoCreateRedirectOnMove.cs:
public class AutoCreateRedirectOnMove
{
protected void OnItemMoved(object sender, EventArgs args)
{
//ensures arguments aren't null
Assert.ArgumentNotNull(sender, "sender");
Assert.ArgumentNotNull(args, "args");
if (Sitecore.Configuration.Settings.GetBoolSetting(Constants.Settings.AutoGenerateRedirectsOnMove, true))
{
Item item = Event.ExtractParameter<Item>(args, 0);
ID oldParentID = Event.ExtractParameter<ID>(args, 1);
// ADDED BY ME
if (oldParentID == item.ParentID) return;
//
using (new SecurityDisabler())
{
CreateRedirectItem(item, item.Database.GetItem(oldParentID));
}
}
}
The line I added prevents a redirect from being generated if the parent of the item has not been changed. I compiled the solution, copied the resulting SharedSource.RedirectModule.dll from the bin and placed it in the bin of my project, overwriting the existing dll.
EDIT: The project owners have merged the fix into their repo so it should be resolved with the next release on the Sitecore Marketplace