What is the differrence between: RewriteCond %{HTTP_USER_AGENT} ^Zeus [OR] and just RewriteCond %{HTTP_USER_AGENT} Zeus?
You have misunderstood what the ^ means. Unlike some things in mod_rewrite and in .htaccess-in-general, the ^ applies to all Regular Expressions everywhere. It is an
opening anchor.
So in your case
"Zeus" = the user-agent string contains the four consecutive letters "Zeus"
while
"^Zeus" = the user-agent string
begins with the four consecutive letters "Zeus"
The counterpart to ^ is $ for closing anchor.
I often read about many stating to post these blocks in alphabetical order with in the .htaccess file. Is this necessary (will it cause problems if it's not in order).
This has nothing to do with Regular Expressions or with htaccess or even mod_rewrite. It is about personal organization. When the list gets long, you need to be able to find things quickly.
Similarly, if you have a list of IP blocks like
Deny from 11.22.33.44
keep them in numerical order.
Finally: mod_rewrite is probably not the most efficient way to do user-agent blocks. I recommend mod_setenvif combined with mod_auth-something so you can run out a string of
BrowserMatch badbot keep_away
mod_setenvif may run before or after mod_rewrite, but even on shared hosting you can be confident that the mod_auth-thingie package runs immediately before the core, after everything else.
btw, what have you got against Yandex? It currently behaves quite well. And their wmt has a feature I wish the Big Boys would steal: they list reasons for not indexing (in my case generally Unsupported Language ;)) with affected pages by name.