To add to Pete Oakey's answer, you can actually tell your plugin to fire only when certain fields are changed at the registration phase, in addition to testing this in actual code @ runtime, by changing the "Filtering Attributes" of the plugin step. So unless your validation logic specifically needs the StateCode
/StatusCode
attributes to correctly process, you can filter those two attributes out, or just include the attributes your validation logic needs.

Original answer:
I believe you can reference the IExecutionContext.Depth Property
of the IPluginExecutionContext
object.
Every time a running plug-in or Workflow issues a message request to
the Web services that triggers another plug-in or Workflow to execute,
the Depth property of the execution context is increased. If the depth
property increments to its maximum value within the configured time
limit, the platform considers this behavior an infinite loop and
further plug-in or Workflow execution is aborted. The maximum depth
(8) and time limit (one hour) are configurable by the Microsoft
Dynamics CRM administrator.
So you can use an if statement to check if Depth > 1
.