It’s probably because after the HTTP to HTTPS redirection occurs, evaluation ends and the loop starts again with the new URL. Because you have no RewriteCond to assess whether the protocol is already HTTPS, it matches the first rule, redirects (HTTPS to HTTPS!) and ends because you’ve set the L flag. Then it starts again, matches the first rule and ends because you’ve set the L flag… 
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
...static-to-dynamic rules follow this...
That should fix it.
htaccess tester - madewithlove shows the rules evaluating. Change the test URL to HTTP to see the first redirect, as this tester does not show multiple iterations of mod_rewrite rules in one pass.
If you like this tester, they made a CLI version in February 2020: Our htaccess tester tool has new features
If you wanted to support both HTTP and HTTPS, this also works:
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^([^/]*)-([^/]*).html$ http%1://%{HTTP_HOST}/index.php?page=torrent-details&name=$1&torrent_id=$2 [QSA,NE,NC,L]
RewriteRule ^([^/]*)_([^/]*).html$ http%1://%{HTTP_HOST}/index.php?page=userdetails&id=$1&name=$2 [QSA,NE,NC,L]
Unfortunately, the MWL tester doesn’t understand the inverted matching of “%{HTTPS}s ^on(s)|
”, but it definitely works in the real world. if you need to dev the rewrites, just use plain HTTP then add the HTTPS conversion back in after confirming the rules work.
apache - Redirecting *.domain.com to www.domain.com with HTTP or HTTPS prefix - Stack Overflow explains the logic of how the HTTP/HTTPS detection works.
There’s a few quite useful tools online which I use frequently. htaccess.madewithlove.be, regex101.com, PerishablePress’s rewrite article, explainshell and others have saved me many hours of frustration.