I'm pretty sure this is a bug in bitcoin. The calls to filesystem::create_directory should be wrapped in try/catch blocks. If there's an error, it should check if the directory exists. If it does, that should be considered non-fatal. (Consider the case where the data directory is the root of a drive. What sense does it make to try to create the directory in that case?!)
Ideally, TrueCrypt should not report a permission denied error if the directory already exists. But I can see reasons that might be unavoidable and, as far as I can tell, it doesn't violate any requirements.
I opened an issue on github.
https://github.com/bitcoin/bitcoin/issues/432