Whenever you create a lead from page layout, 
you need to edit the properties of layout as Lead Assignment Checkbox - Default [ alone not Show on edit page ] 
and whenever you create a lead through code, you need to this just before you insert or update lead record.

Database.DMLOptions dmo = new Database.DMLOptions();
dmo.assignmentRuleHeader.useDefaultRule = true;
Database.update(Lead Record, dmo);

However, Make sure, Lead assignment rule is active and given conditions are correct and the order is as it is supposed.

This will work in all the cases.