As transaction size, the number of signature checks per transaction can affect client performance and the inclusion of many O_CHECKSIG opcodes could be used as a tool for denial-of-service attacks.
I found in CTransaction::AcceptToMemoryPool() the following check:
// Rather not work on nonstandard transactions if (GetSigOpCount() > 2 || ::GetSerializeSize(*this, SER_NETWORK) < 100) return error("AcceptToMemoryPool() : nonstandard transaction");
Then I suppose the OP_CHECKSIG limit is 2, which is fine for security but this limit prevents users from using the advanced contracts Bitcoin is suppose to allow.
Also there is the limit imposed by MAX_BLOCK_SIGOPS, but the limit applies to whole blocks, and only indirectly limit the sigops of a single transaction.