Le terme s'applique à l'origine à un étalon qui ne peut pas se reproduire pour des raisons naturelles et non parce qu'il a été castré, en particulier à un étalon dont les testicules ne sont pas descendus.
Le terme s'est ensuite étendu aux porcs, puis aux hommes impuissants ou maladifs ou encore faibles physiquement, enfin aux enfants maladifs ou délicats.
Debrabandere (2002) écrit que ce mot pourrait peut-être venir du moyen-français piffre < phîfer (cf. allemand Pfeifer "joueur de flute/fifre"). L'idée de faiblesse pourrait venir du sens "jouer de la flûte", la flûte/le fifre étant un instrument de musique peu bruyant, on en arrive à "parler d'une voix faible".
Ce site indique qu'un piffre est un homme gros qui a les joues gonflées, comme s'il jouait de la flûte ou du fifre. Ce mot vient de pifre, qui s'est dit, au XVIe siècle, pour fifre, et qui est l'ital. pifero, esp. pifaro, "fifre". Ces mots, à leur tour, dérivent de l'anc. haut-allem. pfîfa, all. mod. Pfeife, "sifflet". Diez (Dictionnaire étymologique des langues romanes, Friedrich Diez, 1853) remarque que le mot germanique n'est pas indigène et qu'il est une altération du lat. pipare, pipiare, "piauler" (cf. pipeau).
En moyen-français, pif(f)re signifiait "corpulent, gros". Le sens péjoratif se retrouve dans "nez gros et laid" et dans le moyen-français pif(f)re "homme dont les testicules ne sont pas descendus".
Debrabandere indique pour finir le terme pîf (St Pol (?)) "cochon ou veau au sexe indéterminé" ou "avec un seul testicule".
Arthur Fagoo me signale en complément que pif s'utilise pour désigner, selon ses propres mots, "tous les animaux mâles voués à la reproduction lorsqu'ils n'atteignaient pas les objectifs assignés".
Sources:
De Bo, Westvlaamsch Idioticon, [1892], Familia et Patria, Handzame, 1976
De Brabandere, Frans, West-Vlaams etymologisch woordenboek, Uitgeverij L. J. Veen, Amsterdam/Antwerpen, 2002
Greimas, Algirdas Julien, Grand dictionnaire. Ancien Français. La langue du Moyen-Age. De 1080 à 1350, Larousse, Paris, 2007