the difference is what you'd expect it to be:
CPU Time is the time the CPU spent actually executing your program. This need not be a continuous measurement of time, and since only 1 process may be executed on 1 CPU at any given time, your program is not executed continuously, but rather in chunks doled out by the kernel's CPU scheduler.
Elapsed time is the duration your program is running. This is measured continuously from when a process is born until it dies.
For example, you have some program that (for the sake of argument) sorts though a file of stuff and outputs some useful data. You run the program, and 3 minutes later, the results are displayed. That's elapsed time.
If you wanted to check, however, you might find that the CPU time is only 1 min 30 secs. What's going on? Well, since you were running Safari with a text field open in the background and iTunes with its special effects on, the CPU only spent 1:30 actually executing your program's code. The rest of that 3 mins was spent doing something else.