If you declare an application mapping of "/" the behavior of fileExists() doesn't work as expected. The issue appears to be in how allowRealPath argument works.
I've attached a very simple use case that shows the problem.
When the Application.cfc has the following line:
this.mappings["/"] = getDirectoryFromPath(getCurrentTemplatePath());
The behavior of fileExists() is different before the onRequest life cycle and after the life cycle starts.
So, when this mapping exists, fileExists() will start returning false for files that do exist. You can use other file operations (i.e. fileRead()) without any issues.
If the example code in the /www root doesn't work, you can use Brad Wood's vagrant project to spin it up:
Just unzip this folder to a sibling of the folder vagrant-centos-lucee folder (per the Vagrant instructions).
Let me know if you have any questions. I have not tried this under Lucee 5 yet.