I finally discovered why some of the Boardchars kept trying to run into walls whenever MoveTo was called by the scheduler.
ScriptPathTarget = new Dijkstra(); <- It was this bastard! ScriptPathTarget.Hotspots.Add(new Point(x, y)); ScriptPathTarget.Update(); ScriptPathID = target; ScriptPathTargetX = x; ScriptPathTargetY = y; ScriptPathing = true;
When the constructor was being called without a board being passed, it caused UpdateWalls to try and update using some empty board. This meant that the as far as the mapper was concerned, the entity was in an open field, and hence why it couldn't see the wall in front of its face.
The fix is of course maddeningly simple:
ScriptPathTarget = new Dijkstra(this.ParentBoard);
And so now, entities that are told to move by MoveTo, can now actually go where they need to be. Now if you'll excuse me, I need to go to bed. x_x