Are you explicitly calling .Dispose() on the report in your FormUnload event handler? The Crystal SDK is built on COM objects. the .NET framework does not handle memory management well with COM objects so you have to specifically dispose them. Not doing this can cause any number of problems. This may be your issue.
Then other possible cause of the issue is caching. Crystal usually creates at least one temp file while processing a report. It's possible that the second call to open the report is trying to open the file from the first call which no longer exists.
-Dell