Combination of Block and With – Unexpected results

I’m trying to use Block to prevent a function from executing. In this example, the function I’m trying to block will simply be Plus. My code has an inner With clause inside the Block. The With clause performs some operations itself, and also receives an expression passed-in as a function parameter. In the below example, I emulate that with an outer With clause.

Unexpectedly, for a simple two-operand Plus, Block is only blocking Plus for the expression passed-in to the inner With clause, not the Plus operation hard-coded into the With clause. For a three-operand Plus, it blocks everything.

A canonical code sample which produces this behavior is shown below. Any ideas? I may switch to using Inactivate for my real problem, though I have to think it through a bit more. Thanks!

With[{a := 1 + 2},  Block[   {Plus},   SetAttributes[{Plus}, HoldAllComplete];   With[{x := a + 3 + 4, y := a + 3 + (4 + 5)},    Hold[#] &@{x, Unevaluated@x, Hold[#] &@x, y, Unevaluated@y,       Hold[#] &@y}    ]]] 

Results:

Hold[7+(1+2)] Hold[Unevaluated[(1+2)+3+4]] Hold[Hold[7+(1+2)]] Hold[3+(1+2)+(4+5)] Hold[Unevaluated[(1+2)+3+(4+5)]] Hold[Hold[3+(1+2)+(4+5)]]