Updated:
The issue caused by the trailing slash redirect happening after your EE index.php rewrite. You need to have this redirect happen before rewriting to index.php. (Note: almost always, you want all redirects to happen before the rewrite to index.php.)
So, the simplest way to correctly remove the trailing slash, that shouldn't cause you issues, looks like this:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.+)/$ /$1 [R=301,L]
RewriteCond $1 !\.(gif|jpe?g|png)$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]
</IfModule>
In addition to the re-ordering of rules, you don't need to have the full {HTTP_HOST} reference in the trailing slash redirect, so I changed your original:
RewriteRule ^(.+)/$ http://%{HTTP_HOST}/$1 [R=301,L]
to the more simple (but, effectively, the same):
RewriteRule ^(.+)/$ /$1 [R=301,L]
And, there's no reason to include the condition that this rule applies only to site.com, unless you're running other domains on this same virtual host, and want requests to some domain(s) skip this rule. So, I altogether removed this line from your original:
RewriteCond %{HTTP_HOST} !^\.site\.com$ [NC]
But, if you want to remove the trailing slash on requests only to site.com, but not on requests to other domains (say, site2.com), you could add the condition, like this:
RewriteCond %{HTTP_HOST} ^site\.com$ [NC]
RewriteRule ^(.+)/$ /$1 [R=301,L]
Or, if you wanted it to apply to all domains except site.com, you'd do this, instead:
RewriteCond %{HTTP_HOST} !^site\.com$ [NC]
RewriteRule ^(.+)/$ /$1 [R=301,L]
Again, the removal of the trailing slash, which is a redirect, should occur before the rewrite to index.php (redirect rules above the rewrite to index.php in htaccess).
Finally, once you make this change, be sure to restart your browser and/or test in a different browser. Browsers can cache 301 redirects, and may not immediately pick-up these changes.
If you're ever testing a redirect, and want to avoid browser caching, use a 302 (temporary) redirect until you're done testing, and then change to a 301 (permanent) redirect. E.g., you can do this for testing:
RewriteRule ^(.+)/$ /$1 [R=302,L]
Added:
If you still have any trouble, you can be even more explicit about where this rule should not apply, e.g., to not apply to your themes and system folders, etc:
RewriteCond $1 !^(css|images|themes|system)/ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)/$ /$1 [R=301,L]
Original:
I'm not sure if this is the cause of what you're seeing, but your first line of the above .htaccess doesn't seem right:
RewriteCond %{HTTP_HOST} !^\.site\.com$ [NC]
The dot at the beginning means it's excluding the host name .site.com (i.e., extra dot at the beginning).
So, I think you want to remove that . to make it just:
RewriteCond %{HTTP_HOST} !^site\.com$ [NC]
Does making that change resolve your issue?