Is this a reasonable algorithm for shuffling cards?
It's an interesting approach...  Some cleanup to consider...

int i = 0;


i is never used...

rnd.nextInt(52)


You might want to interrogate the size of deck at the start of the method, rather than using a fixed 'magic' number.  That would mean that you'd be able to use the method to shuffle decks of multiple packs of cards for example...

deck.remove(bottomCard);


Although you're treating this as a unique case, it's still card 0, I'd consider defining a constant FIRST_CARD_IN_DECK=0 to represent the card to remove.

It's unclear where deck comes from should it be passed into the shuffle function?