You need another rule before all of the others. This one will convert spaces to hyphens as well as do whatever the exisiting redirect does.
Requests with spaces will be processed by Rule 1.
Requests without spaces will not match the RegEx pattern in Rule 1 and so Rule 1 will be skipped. Rule 2 (your existing redirect) will process those requests.
It's at this point that instead of trying to do complex URL format manipulations in htaccess I instead elect to rewrite the requests to a special PHP script that does all the fancy stuff and which also sends the 301 status too.
In this way, I end up with just one rule in htaccess for URL requests with parameters. The PHP script then sorts out the correct response, 404 or 301, and the correct URL if it's a 301. The PHP script then sends the response to the browser.