Thanks for the help Sebastian. I Finally figured it out. I had overlooked some errors in the DNN event viewer. It was permissions issues for the app pool preventing the schedule cache purge from completing.
Searching the errors led me here (long term fix):
http://www.aubrett.com/InformationTec...
And here (deleting the cache as suggested here didn't fix all of the errors):
http://www.dnnsoftware.com/forums/thr...
Errors were like this:
...System\Cache\Pages\2218_12501F292E5A603685E3125A20F9FDC5BC468018D1CD219CABAB93D3EFC7C5A9.attrib.resources' is denied.
StackTrace:
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at System.IO.StreamWriter.CreateFile(String path, Boolean append, Boolean checkHost)
at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize, Boolean checkHost)
at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding)
at System.IO.File.WriteAllLines(String path, String[] contents)
at DotNetNuke.Services.ModuleCache.FileProvider.SetModule(Int32 tabModuleId, String cacheKey, TimeSpan duration, Byte[] output)
And this:
TYPE:DotNetNuke.Services.Search.SearchEngineScheduler, DOTNETNUKE
EXCEPTION:Access to the path ...\DNNTest\App_Data\Search\write.lock' is denied.
RESCHEDULED FOR:8/20/2015 4:57:16 PM