Imagecache in particular fails when filenames include special chars like + or &.
I suggest the addition of a preg_replace to the file_create_filename function in file.inc that will replace these 'problem' characters with a dash or underscore.
Something like this:
$name = preg_replace('/[&\+\s]/i', '-', $name);
In this case any ampersand, plus sign, or whitespace char will be replaced with a dash. This is probably enough to prevent imagecache from breaking, and any other modules that may have issues. Though more special characters may need filtering out as well.