You should always avoid initializing of reference types in default metadata of Dependency property. Since DP identifier registration is static, so this reference will be shared across all instances of MessageBox.
public static DependencyProperty CtrlButtonCollectionProperty =
DependencyProperty.Register(
"CtrlButtonCollection",
typeof(IList<Button>),
typeof(MessageBoxModule),
new PropertyMetadata(new List<Button>())); <-- HERE
Use other overload where you don't need to pass default metadata or pass null which is default value for all reference types i.e. declare like this:
public static DependencyProperty CtrlButtonCollectionProperty =
DependencyProperty.Register(
"CtrlButtonCollection",
typeof(IList<Button>),
typeof(MessageBoxModule));
And do the initialization in its constructor:
public MessageBoxModule
{
.....
CtrlButtonCollectionProperty = new List<Button>();
.....
}