The problem is that you are passing the wrong thing to the Contains. Contains is supposed to receive an item to look for in the collection but you are passing an entire collection. Because you are using ArrayList, where the items are stored as object you are not receiving a compile time error but it just doesn't work (and the items are compared using object's compare which is to check references.

You can use Linq to do it this way:

string key = "Key1";
var key1Collection = vertices[key].Cast<object>().ToList();
foreach(var item in vertices.Where(x => x.Key != key ))
{
//If you want that all the items of the collection will be in the "Key1" collection:
if(item.Value.Cast<object>().All(x => key1Collection.Contains(x))
{
//Do stuff
}
//Or if you want that at least 1 of the items of the collection will be in the "Key1" collection:
if(item.Value.Cast<object>().Any(x => key1Collection.Contains(x))
{
//Do stuff
}
}

If you change your data structure from ArrayList to List<TheTypeOfYourItems> then you won't need all the .Cast<object>

Email codedump link for C# Determine if Dictionary Contains All of a Set of Values