Here is an improved test that shows off the problem a little better. This happens when you are using boolean syntax with edismax. Either the default query field or the singular field listed in "qf" need to be non-analyzed.
q=text_sw:(theos OR hasa\:colon OR theou)&qf=id
<str name="parsedquery_toString">+(text_sw:theo (id:OR) (id:hasa:colon) (id:OR) (id:theou)))</str>
It fails a little differently if you use an analyzed field in "qf" (or as default)...With:
q=text_sw:(theos OR hasa\:colon OR theou)&qf=text
<str name="parsedquery_toString">+(text_sw:theo (text:"hasa colon") (text:theou))</str>
note the switch from "text_sw" to "text". In either case, removing the colon, or not escaping it resolves the issue. But it would be best if clients could send escaped colons like this so as to prevent users from using colons with real field names (but allowing application code to do so).