As a rule, unless you are doing something quick and dirty you should not use "direct rule". Always use query based rules.
The resource ID of a machine can change - for example, by re-imaging the machine from PXE boot. If you re-image via OSD through the OS then it'll maintain the resource ID. There are other circumstances in which the resource ID may change and in this instance a directly added resource will be lost from the collection.
A better approach is to use a query based rule. So, let's say for example you want to add machines with name "1" and "2" to a collection, create a query based upon the machine name and use this to form the collection. On that basis, even if the resource ID of the machine should change, the device (although actually a different resource) will maintain its place within that collection.
What I suspect has happened in your instance is that the resource ID has changed when the client installed on the machines. In SCCM 2007 this would have resulted in duplicate resources being shown (you may have seen multiple computer resources for one device), but in 2012 I think the behaviour is different and the duplicate is automatically removed.
Does that help? :-/