The expected behavior is that each resource instance be served by exactly one provider (or fail if there are no suitable providers). It is possible, though, that your aws_securitygroup provider's implementation somehow causes the iptables provider also to run for resources to which the aws_securitygroup provider is assigned. I rate that more likely, but...
It is also conceivable that a bug has crept in to Puppet in the area of selecting providers where there are multiple suitable ones for a given resource.
John