the ||= operator checks first, if your value car is already set. If car returns nil, it will assign the first value on the right side which doesn't return nil or false.
So, given your example from above, if you assign a value to car like
car = "BMW"
and you execute you code-snippet, the value of car will still be "BMW";
If method_1 returns (for instance) the String "Value from Method 1" and car is nil or false, then car this String will be assigned to car
car = nil
car ||= (method_1 || method_2)
car # => "Value from Method 1"
If method_1 also returns nil/false, it will check for the value in method_2, and so forth, until it gets some sort of true-value
The difference to your second code-snippet is, that in case of ||= the variable car will be evaluated first, and set if it returns nil or false.
If you use =only, no evaluation will happen and car will be set to the first value on the right that doesn't return nil or false.
-- UPDATE --
To answer your update question, the value on the right side will be evaluated from left to right, so the first one that doesn't return nil or false will be assigned.
car = nil
# method_1 => "nil"
# method_2 => "false"
# method_3 => "value method 3"
# method_4 => "I won't be called"
car ||= (method_1 || method_2 || method_3 || method_4)
# => "value method 3"