Note that the creation of non-similar entries automatically leads to a n^2 algorithm as one has to compare a lot of strings with each other; that is, it gets more and more computer intensive to calculate many examples. However we can get better suggestion by the following procedure:
Say we want to create 50 entries total. What we do is, we create 5x that: 250 candidates:
ClearAll[CleanPhrase,SplitUp,SplitUpAll]
CleanPhrase[x_String]:=StringTrim[StringReplace[x," "..->" "]]
SplitUp[s_String]:=StringReplace[s,"{"~~x:(Except["{"|"}"]..)~~"}":>RandomChoice[StringSplit[x,"|",All]]]
SplitUpAll[x_String]:=CleanPhrase[FixedPoint[SplitUp,x]]
SplitUpAll[x_String,n_Integer?Positive]:=Table[SplitUpAll[x],n]
spinTax="{How much|What amount|Exactly how much|How much money|What amount of money|What} {would|could|will|should|does} {it cost| the price be} {for|for the|for your|for about} {{1|2|3|4|5|6|7|8|9}{0{k|}|00{k| thousand}|000|0000}|{2|3|4|5}00000}{ {monthly|month to month|per month|every month|once a month|reoccurring|}{ {account|subscription|membership}{ level|}|}{ {service|services|program|service|plan|plans|}|}| credits|}";
variationCount=50;
candidates=SplitUpAll[spinTax,5*variationCount];
candidates will now hold 250 samples. We create the so-called NearestNeighborGraph for these entries. This will look like something like this:

Now each point (Vertex) is connected to it's closest other strings. So a string with many connection is close to many other; we want to eliminate those, and 'disconnect' the graph. For each vertex we ask the number of connections and then pick those vertices whose connections are the smallest:
ClearAll[CleanPhrase,SplitUp,SplitUpAll]
CleanPhrase[x_String]:=StringTrim[StringReplace[x," "..->" "]]
SplitUp[s_String]:=StringReplace[s,"{"~~x:(Except["{"|"}"]..)~~"}":>RandomChoice[StringSplit[x,"|",All]]]
SplitUpAll[x_String]:=CleanPhrase[FixedPoint[SplitUp,x]]
SplitUpAll[x_String,n_Integer?Positive]:=Table[SplitUpAll[x],n]
NonSimilarSplitUpAll[x_String,n_Integer,m_Integer:5]:=Module[{candidates,nng,vl,vd},
candidates=Union[SplitUpAll[x,n m]];
nng=NearestNeighborGraph[candidates,3];
vl=VertexList[nng];
vd=VertexDegree[nng];
MinimalBy[{vl,vd}\[Transpose],Last,n][[All,1]]
]
testing out:
spinTax="{How much|What amount|Exactly how much|How much money|What amount of money|What} {would|could|will|should|does} {it cost| the price be} {for|for the|for your|for about} {{1|2|3|4|5|6|7|8|9}{0{k|}|00{k| thousand}|000|0000}|{2|3|4|5}00000}{ {monthly|month to month|per month|every month|once a month|reoccurring|}{ {account|subscription|membership}{ level|}|}{ {service|services|program|service|plan|plans|}|}| credits|}";
variationCount=50;
NonSimilarSplitUpAll[spinTax,50]
should give more 'diverse' choices.