I've found that, on the problem system, the call to Sanitize::pathFile() on line 17 of db-kernel/dblanguage.class.php is returning bool(false). Given that there is no else statement for the if that checks this value, the language database never gets loaded.
Edit:
Sanitize::pathFile() uses
realPath(), which, on Windows, will correct the case of the path, as well as resolving symbolic links and other path components. On the problem system, the constant PATH_LANGUAGES is all lowercase, whereas the actual path has capitals in it. When this is passed to Sanitize::pathFile(), it is compared against the 'real' version of itself, and since the case doesn't match, the function returns false (to prevent directory traversal exploits).
You're right that it's a Windows-only problem – the actual cause is to do with how I've defined a symbolic link which tells Apache where to serve files from, but I'm not sure it'll be possible to check for this error without causing issues for Unix systems.
I'll just fix my symbolic link for now.