Also, notice in his foreach loop, he's calling Dispose on the Entity reference he retrieved - I was under the impression this was not necessary....
Quite correct.
Dispose() is only required if the entity is not database-resident, and not transaction-resident.
The purpose of Dispose() for a DBObject is to do two things:
1. If the object is not transaction-resident, it calls close() or cancel() (otherwise, the transaction takes care of doing that).
2. If the object is not database-resident (e.g, it wraps a 'in-memory' AcDbObject that was allocated on the heap using the 'new' operator), then it calls delete to deallocate the AcDbObject.
Keep in mind that if an AcDbObject is database-resident, its life is managed by the AcDbDatabase, in which case the delete operator should never be called on it.
If we're critiquing Kean's code, then there is something else that may not be obvious, which is that when a CommandMethod is declared with the UsePickSet command flag, you do not need to call SelectImplied(), because GetSelection() will implicitly return any pickfirst selection set if one exists, or prompt for a selection otherwise.
Generally, using SelectImplied() (or (ssget"i") in LISP) is largely pointless, unless you need to know if the resulting selection set was selected in advance of issuing the command, rather than selected in response to the "Select objects: " prompt that would otherwise occur after the command starts.
So, if you want a command that calls GetSelection() to support the pickfirst selection set, just add the CommandFlags.UsePickSet flag to the CommandMethod attribute, and that's all you really need.