I guess one interpretation of Erlang's = (this is from someone rather new to the language) is "Make the thing on the left equal to the thing on the right without mutating existing variables. If that's impossible, error". That nicely accounts for the apparent dual nature of the = operator.
I don't know Erlang, but I have done some Prolog and this sounds an awful lot like unification of an equality predicate.
Erlang has some roots in Prolog. Its initial version was actually implemented in Prolog.
IIRC, it pattern match first and if the variable is not assign then it'll assign it IIRC. The code and explanation just state that it's Erlang to do assertion.
I think that's an interesting concept at least when I play with Erlang.