Похоже, что для RewriteRule нельзя допускать ситуаций, когда сразу 2 условия подходят. В данный момент написал так:
#Desktop HTTP and WWW
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} !^site\.ru [NC]
RewriteCond %{HTTP_USER_AGENT} !(?i:samsung|iphone|android) [NC]
RewriteRule (.*) https://site.ru/$1 [L,R=301]
#Desktop HTTP
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^site\.ru [NC]
RewriteCond %{HTTP_USER_AGENT} !(?i:samsung|iphone|android) [NC]
RewriteRule (.*) https://site.ru/$1 [L,R=301]
#Desktop HTTPS and WWW
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} !^site\.ru [NC]
RewriteCond %{HTTP_USER_AGENT} !(?i:samsung|iphone|android) [NC]
RewriteRule (.*) https://site.ru/$1 [L,R=301]
#mobile WWW
RewriteCond %{HTTP_HOST} !^site\.ru [NC]
RewriteCond %{HTTP_USER_AGENT} (?i:samsung|iphone|android) [NC]
RewriteRule (.*) http://site.ru/$1 [L,R=301]