The double block case is essentially:

``` ruby
expect(dbl).to(have_received(:foo) { }) do
end
```

Basically, `{ }` binds to `have_received` and `do..end` binds to `to`.  As such, the curly brace block is the real block being passed to `have_received`, and should take precedence.  We forward the `do...end` block from `to` to the matcher as a convenience for users.