Objects are matched to particle IDs by selection order. If there are more objects than particles, then some objects are not transformed. Conversely if there are more particles than objects, some particles do not get an object attached to them.
Under the hood, a null named xform_container_pointcloud is added to the scene, and used to build and store an array of transformations corresponding to the points' position, orientation, and scaling. The objects are added to a group called KinematicsGroup, and each object gets an ICE tree that reads a transformation from the array on the null and uses it to set kine.global. Note that adding objects to the group later will not set their transforms — you must reattach the objects to the particles instead.
Select the objects to transform in order, starting with the object that you want to be transformed by the first particle. Alternatively, you can select a group, in which case the order in which the objects were added to the group is used.
Note that previously attached but currently unselected objects are not affected, so they are still attached to the particles that they were originally attached to. This means that you might have two or more objects attached to the same particle unless you detach them manually.