Let me jump in with a few points. I'll use chunks as an example, but the principles apply to other elements as well.
The main difference between the OnChunkSave and OnChunkFormSave events is where they take place. Both are fired after the chunk is saved to the DB, but the OnChunkFormSave event is fired in the Manager layer, so (with one exception -- see below) it will only fire if you save a chunk in the Manager.
OnChunkSave is fired in the modChunk class itself, so it will always be fired when a chunk is saved no matter where or how it's done. For example, if in code you do this:
$chunk = $modx->newObject('modChunk');
$chunk->set('name', 'MyChunk');
$chunk->setContent('Some Content');
$chunk->save();
OnChunkSave will fire, but OnChunkFormSave will not because you didn't save it from a form in the Manager.
The exception is when you use a MODX processor. If you call the chunk create or update processor, the processor will fire the OnChunkFormSave event for you. The OnChunkSave event will also fire when the processor calls $chunk->save(). This is one reason why it's recommended to use the processors when possible.
Similarly, for Resources, if you call the resource create or update processor, it will fire OnDocFormSave for you.
@mrcycling: I don't know why there's no OnResourceSave or OnDocSave event, but if you save a resource in the Manager or call the resource create or update processor, OnDocFormSave will always fire.
There's information
here on using the processors and there's a full list of the available processors (I had completely forgotten that I created this page

.)
The most common reason a new resource won't show up is because Resources are heavily cached, and the new resource is not in the cache (more specifically, the resource map, which is used to list and find resources).
One solution is to do this after creating the resource:
$modx->reloadContext('web'); // or whatever the Resource's context is