Why is Include Actual Execution Plan not included in @@Rowcount when it produces a row count?
That DONE_IN_PROC message from the execution plan is completely independent of your WHILE loop, and isn't what's being checked in your conditional BREAK. Martin deleted his answer but this is very much by design. Your query shouldn't behave differently depending on whether or not your client tool is retrieving execution plans - that would be bad. Execution plans are for monitoring and reviewing, not for influencing actual behavior.

Note that the inverse is also not necessarily a given - not all things that will populate @@ROWCOUNT will lead to the DONE_IN_PROC message, e.g.

DECLARE @foo int, @x varchar(32) = 'hello';
SET @foo = @@ROWCOUNT;
PRINT @foo;


This will yield 1 in the messages pane, but you will not see 1 row(s) affected. 

Now, I've always been a big fan of using SET NOCOUNT ON;, which renders this question rather moot. But it seems the impact of DONE_IN_PROC in modern versions is not what it used to be when I formed this opinion:


Performance Surprises and Assumptions : SET NOCOUNT ON