You are trying to modify sequence while iterating throught it. See Remove items from a list while iterating for further info.
IMO you should consider using list comprehensions, which have many advantages over your current approach.
Firstly: performance. list comprehensions are significantly faster, Speed of list comprehension vs for loop with append, Efficiency of list comprehensions, Are these list-comprehensions written the fastest possible way?.
Secondly:
code readability. list comprehensions syntax is a way more compact, and thus easier to read, that makes it more "pythonic". List Comprehensions Explained Visually
By the way: Even if modifying sequence while iterating it would be good idea, in most cases keeping input (original) and output (processed) datasets separately is very convenient, and allows to derive multiple further outputs (by filtering against different conditions). Replacing original data with processed/filtered makes further changes to filtering conditions impossible, in other hand it's sometimes advantageous when processing input data is very time and/or resource consuming (or, simply, if it's absolutely sure that original dataset won't be needed anymore).
Further reading: (performance optimizations and pitfalls): Generators or List comprehensions, Beware the Python generators
Quick and simple (though a bit dirty) solution to filter data structure described in your question:
In [1]: dat = [(('1', 'Generous', '<=X', 4), 0.33333333333333),
...: (('2', 'Generous', '<=Y'), 0.33333333333333),
...: (('3', 'Generous', '<=Z'), 0.33333333333333),
...: (('4', 'Generous', '<=X'), 0.33333333333333),
...: (('5', 'Generous'), 0.33333333333333),
...: (('6',), 0.33333333333333)]
...:
...: result = [itm for itm in dat if ('<=X' in itm[0]) and (len(itm[0]) >= 3)]
In [2]: dat
Out[2]:
[(('1', 'Generous', '<=X', 4), 0.33333333333333),
(('2', 'Generous', '<=Y'), 0.33333333333333),
(('3', 'Generous', '<=Z'), 0.33333333333333),
(('4', 'Generous', '<=X'), 0.33333333333333),
(('5', 'Generous'), 0.33333333333333),
(('6',), 0.33333333333333)]
In [3]: result
Out[3]:
[(('1', 'Generous', '<=X', 4), 0.33333333333333),
(('4', 'Generous', '<=X'), 0.33333333333333)]