It's very interesting.
There is another place in FBReaderJ code where application writes data
to files.
This is in the org.geometerplus.fbreader.network.NetworkImage class.
Can you check, if application can create file and write image data to
it in the synchronizeInternal(boolean) method.
You can check it by opening network catalog with books, that you
haven't opened before (i.e. there is no cached images for books
covers). If you can see books covers, than application is able to
write images to your SD card.
If application can create file and write image data to it, than there
must be an error in the BookDownloader code.
If it can't, than probably there is a problem with security.
If there is exception thrown while fbreader attempts to write data to
file, can you send me its stacktrace?