$currentUser is an object of type System.User (and so, it you can inspect its attribute values e.g. $currentUser/Name, you can change its attributes e.g. by adding a role to its UserRoles association and committing it etc).
[%CurrentUser%] is a token which is used in XPath expressions. When the query is executed, the token is translated to the GUID (id attribute) of the User object of the current user.
I am fairly certain, that they are both the same when used in an XPath constraint. The token is useful because you can use it outside of Microflows unlike the variable $curentUser. For example, in XPath security constraints in the domain model, and in page elements.