Why that one works:

RewriteEngine On

RewriteCond %{REQUEST_URI} ^/book/blabla$
RewriteRule ^.+$ /book/?name=blabla [NC,L]

But that one does not?

RewriteEngine On

RewriteRule ^/book/blabla$ /book/?name=blabla [NC,L]

I have attempted a lot of things but it is confusing me.

If you are using mod_rewrite inside a .htaccess file, the contextual per-directory prefix of the URL path is removed before testing the guidelines:

Because you will see below, RewriteRule may be used in per-directory config files (.htaccess). In this situation, it'll act in your area, draining the neighborhood directory prefix before processing, and using rewrite rules simply to the remaining.

Which means if you are using mod_rewrite within the .htaccess file within the root directory (/), that path prefix is taken away in the URL path. So /book/blabla is reduced to book/blabla. Your rule pattern must reflect that behavior:

RewriteRule ^book/blabla$ /book/?name=blabla [NC,L]