I think I've found the cause of the confusion. In Room.findPath (https://github.com/screeps/engine/blob/master/src/game/rooms.js#L281), there is the following:
var ret = globals.PathFinder.search(fromPos, {range: Math.max(1,opts.range || 0), pos: toPos}, searchOpts);
for(let i=0; i<ret.path.length; i++) {
let pos = ret.path[i];
if(pos.roomName != id) {
break;
}
//...
}
This break statement is why Room.findPath only returns paths up to the room exit (in this case id is equivalent to this.name).
The documentation for RoomPosition.findPathTo states:
If the target is in another room, then the corresponding exit will be used as a target
So this is expected for RoomPosition.findPathTo, but no such statement exists for Room.findPath, so the behaviour I am seeing is totally unexpected. It's even more confusing when you consider that the documentation for Room.findPath refers to options such as maxRooms.
So the game does use the new pathfinder by default, but the results from Room.findPath are totally confusing. It uses the new pathfinder to find a path all the way to the target but only returns the part of the path inside the current room and discards the rest.