No it is not a bug. Did you read the error messages from your first code?
You are missing he point that this construct is being strict about what it is doing.
You can look at your first one like so:
Everything in blue
is part of the construct ?:, so once completed it then looks at the information in red
which as it is an assignment it cannot
be assigned to an expression.
Your second version of course overcomes this by placing parenthesis around the assignment and hence it is performed prior to returning the value.
Strictly speaking you did not have to go through all this anyway:
echo $((myvar = myvar<5?7:--myvar))