Owen legitimately mentioned that there is "com.cloudbees.jenkins.plugins.customtools.CustomToolInstallWrapper.decorateLauncher()" in the call. This call implements installation of tools on the master, which runs a as a part if the build step and require the environment. This behavior is compliant with Jenkins core API. The Custom Tool Plugin's behavior is correct.
So the problem is with File locking. It may be self-locking of the installer or a conflict/bug somewhere. Or just an antivirus/whatever locking the file.
owood I need the following info:
1) File usage by processes stats. E.g. ProcessExcplorer can provide it
2) If the file is locked by Jenkins itself, use http://file-leak-detector.kohsuke.org/ to triangulate the original lock cause