Les cuento que he estado dándome duro con mi control a fin de hallar la respuesta a mi incógnita, y se podría decir que he tenido éxito. No obstante, hay detalles que aún me gustaría aclarar.
Respecto a la pregunta anterior, ya noté cuándo detectar el cambio de la propiedad tipo colección, aunque me pareció muy raro. Al principio, cuando la creé, supuse que dicho cambio ocurriría en el bloque Set de la propiedad, pero le puse un Breakpoint y no pasaba nada; es decir que la inclusión de un nuevo botón en la colección no estaba relacionado con Set. Por eso estaba preguntando cómo podía detectarla.
Sin embargo, posteriormente noté (usando otro Breakpoint) que al agregar o remover un ítem de la colección se ejecutaba el bloque Get de la propiedad; no entendí por qué. Pero igual escribí allí el llamado al método que agrega y ordena los botones en mi control.
No obstante, mis problemas no acabaron allí. Por un lado, vi que una vez incluidos los botones en mi control podía manipularlos; o sea, moverlos y de hecho sacarlos del control. Eso no me gustó. Y por otro lado, empecé a tener un error con algo llamado SerializableAtribute. Eso me condujo a esta página (entre otras) que me sirvió de mucho:
http://msdn.microsoft.com/es-es/library/ms171731.aspx. Gracias a ese ejemplo descubrí que ese extraño caso de que al cambiar la colección se ejecutara Get en vez de Set ocurre sólo al definir la propiedad como lista o colección; pero al definirla como Array se corrige la eventualidad. Es decir que ahora que tengo la propiedad tipo Array, se ejecuta Set al cambiar la colección y presionar el botón Ok en el editor de colecciones. No obstante, sigo sin entender por qué con List y Collection no. Si alguien lo sabe...
Y lo otro que quiero saber es cómo puedo cargar los botones a mi control sin que puedan manipularse. Quiero que sean como los que uno crea directamente en un UserControl, que no son manipulables desde donde usa el mismo. ¿Alguna idea?