...I need more basic information than I am finding so far regarding the functionality/role of the Rainbowduino driver and it's ability to operate stand-alone. Because it has a USB and programming capability my assumption was that it was something like a constrained functionality Arduino.
I would call it a specialized Arduino, rather than constrained. The key difference is that instead of offering data pins, it offers sockets into which the LED displays, such as your matrix unit, plug into directly. I suspect that the LED driver chips use most or all of the data pins, so there is little reason to expose them. Once the program is downloaded into the device, it is CAN be used stand-alone, for example using a wall-wart to power it and nothing else except the display.
Now I have it in my hand I see it more as a pattern generator that needs to be controlled by a higher level device (eg Arduino) in which case how do you decide how to partition functionality between the two? Some worked/working examples would be useful. If it is always used with an Arduino and can be programmed via an Arduino why does it have a USB interface?
It does NOT require an Arduino; it effectively IS an Arduino. The USB interface, similar to what you find on an Arduino (though a different shape), is used to connect to the host computer to download programs. Here are two use cases.
1. You are generating simple patterns from an Arduino program. Once said program is downloaded, it is quite independent, and will work with only a wall wart and display. Working examples: any of the examples that are packaged with the library.
2. You are creating patterns using floating point numbers and their functions which would not execute quickly enough, or would be too large, to be run on the on-board Arduino chip. In this case, you would create an Arduino program that reads commands from the serial interface. The commands would be oriented towards turning specified lights to specified colors, individually or potentially as blocks.
Then you would create a program that runs on Linux (etc) whose purpose is to send commands in the expected format to the device via USB. This program would be written to create patterns from more complex math.
A good approach would be for this host program to have one buffer for the current state of the Arduino-hosted display, and a second buffer for the new, desired state. That way, your program would operate on the buffer for desired state in one thread, and a separate thread would compare existing state to desired state, and on finding differences, generate the commands to the Rainbowduino to update the display, and also to update the buffer for current state as it goes.
3. You COULD use a second Arduino (one that has a USB host interface) as a generator of patterns, as in #2 above, but it probably would not do much better than approach #1, especially if floating point is required.
Under Resources on the Seeed site there are two downloads one for the Rainbowduino3.0_Library.zip and the other for the Rainbowduino_for_Arduino1.0.zip, which of these do I need and why?
I don't work for Seeedstudio, so I can only make an educated guess.
Arduino 1.0 is a new release of the development environment, which is supplied by the official Arduino company in Italy (not Seeedstudio). I suspect that Rainbowduino3.0_Library.zip, which has files with dates from around October, was written against a pre-1.0 version of the Arduino dev env. Rainbowduino_for_Arduino1.0.zip has some of the same files, but a few minor mods, along with a readme explaining the key change:
Change the 33th line in Rainbowduino.h "#include <WProgram.h>" to "#include <Arduino.h>"
Before Arduino 1.0, the main Arduino header file was called WProgram.h. You will find programs posted all over the place that still refer to it, since its release is recent, and a lot of posted code gets forgotten. Assuming you are using the Arduino 1.0 IDE release (which I recommend), you may need to make a change like this to programs that refer to WProgram.h to have them include the file by its new name, Arduino.h. If you don't make this change, the compiler will give an error message and fail.