Your complaints about your student's behavior consist in the following:
1) Failure to attend lectures.
2) Not paying close attention when he does attend.
3) Possibly recycling homework from when he took your class several years before.
None of these behaviors are what I would call "defiant": a defiant student openly and aggressively pushes back against your authority in a way that carries the danger of ruining the course for the other students. I don't see that here, except possibly a little bit in 2): perhaps students who see another student attend and not paying attention may themselves attend and not pay attention. But probably only if they don't find the lectures worthwhile.
I have to say that I don't really understand why you withdrew from your course a student who was doing well on both exams and assignments: for a CS course, presumably that's where all the assessments are coming from. If you were teaching a course in which the class featured discussions of a kind where absence would affect everyone -- e.g. a creative writing class where much of what the students are getting is critiques on their work from other students -- then I could understand, but if it's a lecture course and the student doesn't need to attend the lectures to do well...then in my mind withdrawing such a student is a solution without a problem.
(Perhaps I should add that in recent years I have had mandatory attendance policies in many of my undergraduate courses. Moreover I have withdrawn two students for lack of attendance. These two students would essentially never show up except for the in-class midterms, on which they would do badly. When I wrote to them to tell them that they had to start coming to class, they did not write back. So I withdrew them.)
I also don't have much sympathy for the idea that your student is "self-plagiarizing." Honestly, you sound like you are a bit annoyed with him and looking to punish him...wait, you came right out and said that last part. If it is specifically detailed in your course policies that reusing programs is forbidden, then you have a leg to stand on. Otherwise I think not. Self-plagiarism (I don't really like the term -- you cannot steal from yourself) occurs when you pass off old intellectual content as new intellectual content. But not all academic assignments ask the student to create new intellectual content. Some assignments are exercises, done to develop skills. And many exercises will be solved in essentially the same way by most competent people. I just don't think the task in a CS class is to write code different from all code that was written before, generally. In fact, I would go so far to say that when learning to write code, reusing old code is most often a good practice.
As an undergraduate math major, I would occasionally get assigned problems that I had also been assigned in a previous course. I usually would recopy my previous assignment: why not? But I never had a whole course in which the homework was a repeat from a previous course, not even when I took a course that I had taken elsewhere a few years before.
If you don't want your students to reuse material from previous courses, there is an easy solution by the way: don't yourself reuse homework assignments from previous courses. Your student could accuse you of "self-plagiarism." I think you should take the two self-plagiarism contentions equally seriously or equally unseriously.