How are you building your AST nodes? We generally either use our DefaultAstNode (which is a simple generic node with string value and supports children), or we use the Language Designer to design the AST nodes and code generate them. It's very easy to do so and the nodes it makes will have type-specific properties and it can make modifiable collections. The third option is to just implement IAstNode yourself but that's more work than the other two ways.
I would highly recommend letting the Language Designer build nodes for you if you are making type specific nodes. It makes nodes that inherit AstNodeBase. It effectively adds various collection properties and then overrides GetChildrenEnumerator to return a yield of all the collection property items. Since Children just calls that enumerator method, that's why modifying Children does nothing.